Auto-tài sản là một chỉ định viết tắt của tự động thực hiện sở hữu, nơi mà các nhà phát triển không cần phải khai báo một cách rõ ràng lĩnh vực sao lưu và trình biên dịch đặt lên đằng sau hậu trường.
1. Auto-tài sản với setter tin
public class Context1
{
public Context1()
{
this.Items = new List<string>();
}
public List<string> Items { get; private set; }
}
Auto-thuộc tính có thể có Accessibility khác nhau cho setter và getter bằng cách xác định một khả năng tiếp cận hạn chế hơn cho các accessor mà khả năng tiếp cận khác với khả năng tiếp cận của khách sạn.
ví dụ khác là:
public string Prop1 { get; private set; }
public string Prop2 { get; protected set; }
public string Prop3 { get; internal set; }
public string Prop4 { protected internal get; set; }
Những accessors với khả năng tiếp cận khác nhau có thể được truy cập bất cứ nơi nào cho khả năng tiếp cận xác định, không chỉ từ các nhà xây dựng.
2.Thuộc tính chỉ đọc với trường sao lưu
lớp công khai Ngữ cảnh2 { riêng tư Danh sách mục;
public Context2()
{
this.items = new List<string>();
}
public List<string> Items
{
get { return this.items; }
}
} Trước C# 6, cách duy nhất để thiết lập giá trị của một thuộc tính chỉ đọc đã tuyên bố rõ ràng các lĩnh vực sao lưu và đặt nó trực tiếp.
Do trường có đường dẫn readonly
, nó chỉ có thể được đặt trong khi xây dựng đối tượng.
3. Read-Only Auto-tài sản
public class Context3
{
public List<string> Items { get; } = new List<string>();
}
Bắt đầu với C# 6, §2 thể được xử lý bởi trình biên dịch bởi có một lĩnh vực sao lưu được tạo ra như thế nào cho đọc-ghi tự động tính nhưng , trong trường hợp này, trường sao lưu là chỉ đọc và chỉ có thể được đặt trong khi xây dựng đối tượng.
4. Read-only Auto-tài sản với biểu getter thân
public class Context4
{
public List<string> Items => new List<string>();
}
Khi khách sạn có một giá trị thay đổi mỗi khi nó là nhận được, C# 6 cho phép để khai báo cơ thể của getter sử dụng a cú pháp giống như cú pháp lambda.
Đoạn mã trên là tương đương với điều này:
public class Context4
{
public List<string> Items
{
get { return new List<string>(); }
}
}
Vì vậy, số 4 giống như một hằng số, nhưng với một loại tài liệu tham khảo !? –
Nếu theo "hằng số", bạn có nghĩa là "liên tục trả về một trường hợp mới có giá trị này" (à la https://xkcd.com/221), thì ... uh, tôi đoán vậy. Nhưng đó không phải là những gì "liên tục" có nghĩa là. Có một loại tham chiếu lý do * không thể * là hằng số. – BoltClock
Số 1 và 2 có giống nhau không? –