[英]Declare property getter in parent interface and setter in child interface in c#
[英]Property Getter / Setter not part of an interface contract
為什么getter / setter不是接口合同的一部分? 例如:
public interface IFoo
{
int Id { get; }
}
class Foo : IFoo
{
public int Id { get; set; }
}
即使接口聲明不同,為什么也允許在這里使用setter? 我在這里遇到的問題是不變性。 允許實現我的界面的客戶端創建我不鼓勵的可變類型。 我是否被迫退回到使用方法和只讀字段?
要實現接口,您必須至少提供其包含的方法。
您可以提供更多(例如,實現另一個接口)。
您可以將getter / setter對視為set_Id(int i)
和get_Id()
。
實際上,這就是在較低CLI級別上對它們進行建模的方式。
因此, set_Id(int i)
只是實現者提供的另一種方法,您無法采取任何措施阻止他這樣做。
接口提供合同。 它說,無論誰實現我(接口),都應至少實現他們提供的所有規范。
它沒有任何限制,您可以實現您希望提供的除了接口協定指定的任何其他成員,但不能少。
另外,c#作為一種語言不提供對不變性的支持,因此您無法阻止用戶實現可變類型。
我是否被迫退回到使用方法和只讀字段?
我不確定您在這里是什么問題,因為您說過允許實現我的接口的客戶端創建可變類型 。 誰是客戶? 另一個程序員?
無論如何, readonly
並不是真正的readonly 。 請記住,您始終可以使用反射槍對其進行修改,它比readonly
功能強大。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.