C#接口中为什么不能像java那样使用static?
我印象中java里面的接口使用static final修飾的常量,不是成員方法,使用static修飾的method放在接口中是無意義的,接口是用來抽象的。。。。
與Java不同,C#中的接口不能包含域(Field)。另外還要注意,在C#中,顯式為接口的方法指定public修飾符是非法的。
綜上,所以c#接口中不允許使用static~~因為他的接口中沒有field這個概念,與java不同,而java中使用static的也正是field,而不是method!
接口不實現方法,static是靜態調用,調用不實現的方法,有意義嗎?
接口里的方法是通過接口映射表來調用實現的(vmt),用virtual沒有意義..
接口里不實現方法,自然override重寫就沒意義了..
接口是全部抽象的,既然全都是抽象,就沒必要用abstract標明了.
接口里的方法是通過調用擁有此接口的類來調用的(或顯示地調用接口的某方法).在此類的聲明中,必須有定義此接口的此方法實現.再來看下static:靜態字段、靜態屬性可以在類的實例之間共享(也就是任何類的某對象可以直接使用靜態字段,注意是對象在使用靜態字段、屬性)。而靜態方法的使用只需此類名調用即可(不是用此類的對象去調用,即,不能聲明此類的一個對象去調用靜態方法,它與對象無關),另外,靜態方法必須是個有具體代碼的方法,不能是空方法.因為任何一個編譯器在編譯時都必須非常清楚地知道此方法是要如何地被執行.static是讓成員在其對象上進行共享的,而abstract一定是要讓其繼承,讓其重載,讓其有另一套,故不能用static修飾接口里的成員變量.
字段、方法、屬性用static聲明,表示它們是類的靜態成員,而不是對象實例的成員。
這樣看來,因為接口本身就是abstract,一定是abstract的.故,它的所有成員都一定是abstract,不需要用abstract去顯示地聲明成員,若顯示地聲明了,也沒大錯,只是沒有意義而已(因為大家都知道你一定就是abstract,不需要叫你名字的時候再特意重聲下abstract,沒意義).因為接口的所有成員一定是abstract,故接口的所有方法不能有任何實現代碼(即一定要被調用它的類在定義時重載,故不用virtual修改方法,同上面不需要用abstract修改一樣的道理).所以,接口的所有方法在聲明時,不需要使用virtul,override關鍵字來修飾.
參考資料: http://blog.csdn.net/chinmusam/archive/2010/04/18/5499445.aspx
總結
以上是生活随笔為你收集整理的C#接口中为什么不能像java那样使用static?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mp4文件格式系列
- 下一篇: 通过点击事件监听 setOnClickL