Trong khối thứ hai của bạn mã bạn đang tạo ra một phương thức thiết lập công, nhưng từ "ghi đè" trong khai báo làm cho trình biên dịch tìm kiếm một phương thức có cùng chữ ký trong lớp cơ sở. Vì nó không thể tìm thấy phương pháp đó, nó sẽ không cho phép bạn tạo tập hợp của bạn.
As ArsenMkrt cho biết bạn có thể thay đổi khai báo cơ sở của mình để chứa tập hợp được bảo vệ. Điều này sẽ cho phép bạn ghi đè nó, nhưng vì bạn vẫn không thể thay đổi chữ ký, bạn không thể quảng cáo phương thức này cho công khai trong lớp con của bạn, vì vậy mã bạn đã đăng vẫn không hoạt động. Thay vào đó, bạn cần phải thêm một phương thức thiết lập ảo công khai vào lớp cơ sở của bạn mà không làm bất cứ điều gì (hoặc thậm chí ném ngoại lệ nếu bạn thử gọi nó) nhưng điều này đi ngược lại những gì người dùng của lớp mong đợi hành vi để được như vậy nếu bạn làm điều này (và tôi sẽ không khuyên bạn nên nó) chắc chắn rằng nó là như vậy cũng ghi nhận rằng người dùng không thể bỏ lỡ nó:
///<summary>
///Get the Text value of the object
///NOTE: Setting the value is not supported by this class but may be supported by child classes
///</summary>
public virtual string Text
{
get { return text; }
set { }
}
//using the class
BaseClass.Text = "Wibble";
if (BaseClass.Text == "Wibble")
{
//Won't get here (unless the default value is "Wibble")
}
nếu không tuyên bố thiết lập như một phương pháp riêng biệt trong lớp con của bạn:
public override string Text
{
get { return differentText; }
}
public void SetText(string value)
{
differentText = value;
}
Nguồn
2009-08-04 12:36:41
Tôi muốn làm giống hệt nhau. Nên có thể. –
Có thể nhưng yêu cầu "tầng lớp trung lưu". Ngoài ra nó có lẽ không phải là một ý tưởng tốt trong nhiều tình huống, nhưng có một số ngoại lệ, ví dụ khi ghi đè các thuộc tính trừu tượng. Cơ sở: 'chuỗi trừu tượng công khai Văn bản {get; } '. Trung (thừa kế cơ sở): 'văn bản chuỗi nội bộ được bảo vệ;' 'chuỗi ghi đè niêm phong công khai Văn bản {get {return text; }} '. Trẻ em (kế thừa giữa): 'chuỗi văn bản mới công khai {get {return text; } đặt {text = value; }} '. Bộ sửa đổi nội bộ được bảo vệ và phần ghi đè được đóng kín đảm bảo đóng gói không bị vỡ bên ngoài bộ phận lắp ráp của bạn. – AnorZaken
@AnorZaken: Đó không phải là trọng, đó là bóng tối. Nó không đòi hỏi một lớp "trung bình". – Guffa