簡體   English   中英

屬性獲取器/設置器不屬於接口合同的一部分

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM