回答
可以說它可以被定義。所以:
interface Foo
{
int Number;
string Text;
}
class Bar : Foo
{
public int Number;
public string Text;
}
所以,(實現美孚接口類)每個派生類,你就必須建立兩個公共成員。至少對我而言,這是毫無意義的。
如果你想你的類有一些成員是不是方法,你想簡化它儘可能,看看Auto-Implemented Properties。
因爲變量和字段是實現。接口是聲明它們做什麼的合同,而不是它們如何做。
如果你想聲明字段,那麼你需要創建一個基類(可能是抽象類)。
從消費者的角度來看,接口和抽象基類之間的一個重要區別是,只能從一個基類派生類,而類可以實現儘可能多的接口。
超越「因爲這是規範」我不確定,其中一個原因可能是,在我看來,在接口中允許允許可以直接綁定到一個方法(屬性映射一個或兩個方法) 。
接口旨在描述行爲,而不是實現。
接口的用法是什麼?它基本上就是合同。那麼,在合同中聲明一個變量的預定義格式有什麼意義?沒用。加上它就像一個模板。
一個接口的想法是聲明一個類型的部分對外界來說是合理的,或者反過來不關心實現的細節。因爲字段應該被視爲實現細節,所以即使能夠聲明它們也是矛盾的
因爲變量定義了事物在對象中的存儲方式。這與接口的想法不兼容。
而且這會導致多重繼承式的問題,如
interface A { int x; }
interface B { int x; }
class C : A, B
哪x
實例應包括在C(一個OCH都和你如何區別它們在這種情況下?)
您應該在界面中使用屬性,因爲您可以通過指定實現來定義該屬性。這符合相同的目的,但具有更好的封裝。
假設我們可以有一個接口聲明一個字段,並且它只是意味着任何實現該接口的類都必須提供一個具有相同名稱的同一類型的公共字段,但我不明白「哪個實例x應該包含在C中嗎?「是相關的。兩個接口上的字段'x'只會引用內存中的相同內容。想想一個類'C'實現兩個接口'A'和'B',它們都聲明瞭一個'void x();'。你在這裏看到什麼問題嗎? –
我認爲@Albin提到的*多重繼承風格問題是指*鑽石問題*,也就是說,當您有一個類「D」繼承於類「B」和「C」時,共同父類「A」中的一些方法。如果你在'D'的實例中調用該方法,哪個代碼會被執行? –
接口充當contract
。所以,它不能包含variable declaration
。但是,它可能包含Properties
解碼,您將在inherited class
中執行。
- 1. 爲什麼接口變量或字段更精確不是默認值?
- 2. 變量聲明:爲什麼接口
- 3. 爲什麼在接口中聲明Objective-C實例變量?
- 4. 爲什麼不能從接口繼承
- 5. 爲什麼我不能爲我的常量字段賦值?
- 6. 爲什麼功能參數包含地址或變量用C
- 7. 爲什麼最終字段變量不能在Java中分配爲空白?
- 8. 爲什麼GoDoc不顯示接口變量?
- 9. 爲什麼我不能直接將__int64變量設置爲-2500000000?
- 10. 爲什麼我不能在df_tbl中改變這個字段?
- 11. 爲什麼在接口爲什麼不能在抽象類
- 12. 可能的接口用作變量? C#
- 13. 爲什麼不會變量連接?
- 14. 爲什麼GLatLng()不接收變量?
- 15. 爲什麼OPENQUERY不接受變量?
- 16. C#:爲什麼調用實現的接口方法對於類變量比接口變量更快?
- 17. 爲什麼我不能更改變量?
- 18. 爲什麼變量不能在MySQL的
- 19. 爲什麼變量不變?
- 20. C#爲什麼不設置該變量?
- 21. 爲什麼我的變量無法接收值(接口)
- 22. 爲什麼我不能設置的接口類的成員變量如下
- 23. 爲什麼接口或抽象類有用? (或爲什麼?)
- 24. 爲什麼我不能直接分配變量值?
- 25. C++。爲什麼我不能使用trait類實現接口?
- 26. 爲什麼Visual C++接口不能包含運算符?
- 27. 爲什麼不建議在SQLite的C接口接口sqlite3_get_table
- 28. FORTRAN:爲什麼不能初始化INTENT(OUT)或RESULT變量?
- 29. 爲什麼宏整型文字不能用於整型變量?
- 30. 爲什麼自動增量字段不能正常工作?
看看[this](http://stackoverflow.com/questions/2115114/why-cant-c-interfaces-contain-fields)上一篇文章。 – Vladimir