Tôi muốn chỉ thực thi việc khởi động C# trên một thuộc tính đã cho từ một lớp trừu tượng cơ bản. Các lớp có nguồn gốc có thể, nếu họ muốn, cũng cung cấp một setter cho tài sản đó cho việc sử dụng công khai của kiểu ràng buộc tĩnh.Ghi đè thuộc tính chỉ đọc trừu tượng để đọc/ghi thuộc tính
Với lớp trừu tượng sau:
public abstract class Base
{
public abstract int Property { get; }
}
Nếu tôi muốn có một lớp được thừa kế mà còn thực hiện một setter, tôi ngây thơ có thể thử:
public class Derived : Base
{
public override int Property
{
get { return field; }
set { field = value; } // Error : Nothing to override.
}
private int field;
}
Nhưng sau đó tôi nhận được một lỗi cú pháp kể từ khi tôi cố gắng ghi đè lên setter không tồn tại. Tôi đã thử một số cách khác như tuyên bố setter cơ sở tư nhân và như vậy và tôi vẫn vấp ngã khi tất cả các loại lỗi ngăn cản tôi làm điều đó. Phải có một cách để làm điều đó vì nó không phá vỡ bất kỳ hợp đồng lớp cơ sở nào.
Thật không may, nó có thể được thực hiện với giao diện, nhưng tôi thực sự cần thực hiện mặc định đó.
Tôi tình cờ gặp tình huống đó thường xuyên, tôi tự hỏi liệu có một mẹo cú pháp C# ẩn để làm điều đó không, tôi sẽ chỉ sống với nó và thực hiện phương thức SetProperty() thủ công.
Cross-link: http://stackoverflow.com/questions/2243886/make-a-read-only-property-writable-in-the-derived-class – Mikhail