2011-12-15 111 views
32

任何人都可以請我幫忙,無論是在接口還是抽象類中包含屬性的最佳做法?接口上的c#屬性

我會想象一個接口應該只有方法簽名?

+0

[Interface vs Abstract Class(general OO)](http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo) – MPelletier 2011-12-15 01:21:10

+2

這可能是一個重複嗎?正如凱爾在下面指出的那樣,接口和抽象類可以有屬性,所以沒有「對比」這裏。 – bryanmac 2011-12-15 01:23:37

回答

11

性質的界面是細

參見:

http://msdn.microsoft.com/en-us/library/ms173156.aspx

接口包括方法,屬性,事件,索引,或者任何 這四個構件類型的組合。一個接口不能包含常量,字段,運算符,實例構造函數,析構函數或 類型。它不能包含靜態成員。接口成員 自動公開,並且它們不能包含任何訪問修飾符。

+20

僅僅因爲這可能並不意味着這是OP要求的最佳實踐。 – 2013-06-23 19:40:25

12

在接口中具有屬性是完全可以接受的。我一直這樣做。

+0

也許這只是一個偏好問題。那麼,我會忘記這些辯論,並按照你所做的去做。 – SWIIWII 2017-11-16 18:36:56

6

將屬性包含在接口或抽象類中是完全有效的。

25

屬性是方法的語法糖。試想一下:

我有一個屬性:

String PropertyA { get; set; } 

在運行時,這將成爲像這樣:

String get_PropertyA() { ... } 
void set_PropertyA(String value) { ... } 

注意, 「...」 表示代碼,將由代碼生成器放在那裏。實際上,我所說的是,除了C#之外,屬性並不存在,因爲它們會使用我的示例中所示的對齊方式編譯爲方法。爲了確認我在說什麼,你可以使用反射並查看反射代碼的外觀。

但是,如果在執行過程中執行一些不重要的操作,那麼將屬性放在接口上可能是個不好的做法。例如,如果我想設置一個變量並更新其他變量,或者設置屬性可能由於內部條件而拒絕我的屬性分配,則不應使用屬性。我認爲這是一個適用於界面以外的通用規則。

1

我不相信這是最好的做法。

接口允許屬性(實際上是方法)。除此之外,任何事情都只是一種意見。這包括我關於更多意見的觀點。