Điều gần nhất sẽ là một nhà xây dựng với các thông số tùy chọn:
class Contact
{
public string Name { get; }
public string Address { get; }
public Contact(string name = null, string address = null) {
Name = name;
Address = address;
}
}
Sau đó, bạn có thể gọi nó với tên tham số:
new Contact(
name: "John",
address: "23 Tennis RD"
)
Cú pháp là hơi khác nhau từ một initializer đối tượng, nhưng nó cũng như có thể đọc được; và IMO, sự khác biệt là một điều tốt, bởi vì các tham số của hàm tạo có xu hướng đề xuất các thuộc tính bất biến. Và bạn có thể chỉ định các tham số theo thứ tự bất kỳ, hoặc để lại một số, vì vậy nó chỉ mạnh mẽ như cú pháp khởi tạo đối tượng.
Điều này đòi hỏi một số mã phụ (xác định hàm tạo, gán tất cả các thuộc tính), vì vậy nó hoạt động nhiều hơn cú pháp khởi tạo đối tượng. Nhưng không quá khủng khiếp, và giá trị của những vật thể bất biến là đáng giá.
(Đối với những gì nó có giá trị, C# 7 có thể nhận được immutable "record types" có cú pháp đơn giản hơn nhiều Đây có thể hoặc không thể làm cho nó thành phiên bản chính thức, nhưng họ âm thanh khá mát mẻ..)
Nguồn
2016-05-08 21:51:50
Tôi cần setters - nope nó không phải! Nó yêu cầu quyền truy cập ghi trên trường hoặc thích hợp. Trong trường hợp của một tài sản nó thực sự cần một setter. Trong trường hợp của một trường, nó không thể là tĩnh hoặc chỉ đọc được. –
Chính xác. Lý do tại sao tôi nói: "sau đó đặt giá trị thuộc tính, yêu cầu setter". Ngay cả với một setter công cộng, nếu các lĩnh vực sao lưu là chỉ đọc, cố gắng để viết cho nó thậm chí sẽ không biên dịch. –