Có một số sự khác biệt nội bộ giữa C# cú pháp cách đường làm thuộc tính:Có thể sử dụng biến công khai trong C# nếu nó là chỉ đọc không?
public string FirstName { get; set; }
và chỉ cần làm biến công cộng như thế này:
public string LastName;
tôi giả cách đầu tiên được ưu tiên và thứ hai tới tránh. Tuy nhiên, tôi thường thấy loại thuộc tính chỉ đọc này được sử dụng là một dạng của loại thứ hai ở trên:
public readonly string InternalCode;
Đây có phải là cách thực hành tốt nhất để tạo thuộc tính chỉ đọc không?
using System;
namespace TestProps
{
class Program
{
static void Main(string[] args)
{
Customer customer = new Customer();
customer.FirstName = "Jim";
customer.LastName = "Smith";
customer.Show();
}
}
class Customer
{
public string FirstName { get; set; } //prefered
public string LastName; //avoid
public readonly string InternalCode; //???
public Customer()
{
InternalCode = "234729834723984";
}
public void Show()
{
Console.WriteLine("{0}, {1} ({2})", LastName, FirstName, InternalCode);
Console.ReadLine();
}
}
}
bài viết đó là hai trang trực tiếp giải quyết câu hỏi của tôi, cảm ơn! Tôi hiểu từ nó rằng Jon thậm chí sẽ không chấp nhận "công khai chỉ đọc bool IsValid;" Trừ khi, như ông đề cập ở cuối, nó là trong một lớp lồng nhau –
Đối với những người trong chúng ta chỉ tìm kiếm một câu trả lời và không phải là một bài viết dài, bạn có thể thêm một cảnh báo spoiler ở đây và cho chúng tôi câu trả lời có hoặc không? – DOK
Bài viết Skeet thực sự tạo ra một vài ngoại lệ, một trong số đó có thể áp dụng cho câu hỏi này. Theo bài báo, "Tôi sẽ tạo một ngoại lệ nhỏ cho các trường chỉ đọc tĩnh như string.Empty". Câu hỏi này có thể đã được sửa đổi và bằng cách di chuyển nhiệm vụ từ các nhà xây dựng lên cùng một dòng sẽ được public static readonly string InternalCode = "234729834723984"; Như vậy, nó sẽ là một "trường chỉ đọc tĩnh" giống như Skeet được mô tả. – John