CLR via C#学习笔记-第十三章-定义接口、继承接口
13.1?類和接口繼承
接口是為了實現多繼承
所有的類都繼承了System.Object,及其四個公共實例方法:ToString、Equals、GetHashCode、GetType。
CLR允許定義接口,它實際只是對一組方法簽名進行了統一命名。這些方法不提供任何實現。
類通過指定接口名稱來繼承接口,而且必須顯式實現接口方法,否則CLR認為此類型定義無效。
實現接口方法的過程比較繁瑣,所以說接口繼承是實現多繼承的一種縮水版機制。
編譯器和CLR允許一個類繼承多個接口,繼承的所有接口都必須實現。
?
接口繼承特點
類繼承的一個重要特點是,凡是能使用基類型實例的地方,都能使用派生類型的實例。
類似的,凡是能夠使用具名接口類型的實例的地方,都能使用實現了接口的一個類型的實例。
?
13.2?定義接口
接口還能定義事件、無參屬性和有參屬性。
所有這些東西的本質上都是方法,他們只是語法上的簡化。
不過接口不能定義任何構造器方法,也不能定義任何實例字段。
?
接口不能定義靜態成員
CLR允許接口定義靜態方法、字段、常量和構造器,但符合CLS標準的接口決不允許,C#禁止接口定義任何一種靜態成員。
?
接口定義就是類型定義
在CLR看來,接口定義就是類型定義。
也就是說CLR會為接口類型對象定義內部數據結構,同時可通過反射機制來查詢接口類型的功能。
和類型一樣,接口可在文件范圍中定義,也可嵌套在另一個類型中。定義接口類型時可指定你希望的任何可見性、可訪問性。
?
接口繼承不是嚴格的繼承
接口定義可以從另一個或多個接口繼承。但它不是嚴格的繼承。
接口繼承的工作方式并不完全和類繼承一樣。
作者傾向于將接口結成看成是將其他接口的協定contract包括到2新接口中。
例如ICollection<T>接口定義包含了IEnumerable<T>和IEnumerable兩個接口的協定,有下面兩層含義:
1.繼承ICollection<T>接口的任何類必須實現ICollection<T>、IEnumerable<T>和IEnumerable三個接口所定義的方法。
2.任何代碼在引用實現ICollection<T>接口的對象時,該類型還實現了IEnumerable<T>和IEnumerable接口。
?
13.3?繼承接口
顯式為實現接口的方法標記virtual和隱式的區別
編譯器要求將實現接口的方法標記為public。
CLR要求將接口方法標記為virtual,編譯器會將他們標記為virtual和sealed。這會阻止派生類重寫接口方法。
將方法顯式標記為virtual,編譯器就會將該方法標記為virtual并保持它的非密封狀態,使派生類能重寫它。
?
派生類重寫基類實現的接口方法
派生類不能重寫sealed的接口方法,但派生類可重新繼承同一個接口,并為接口方法提供自己的實現。
下例對此進行了演示:
//派生自Object,他實現了IDisposable internal class Base:IDisposable{public void Dispose(){Console.WriteLine("Base's Dispose");} } //重新實現了IDisposable internal class Derived:Base,IDisposable{new public void Dispose(){Console.WriteLine("Base's Dispose");} }在Main函數中進行調用:
/*****************第一個例子****************/ Base b=new Base(); //用b的類型調用Dispose,顯示"Base's Dispose" b.Dispose(); //用b的對象的類型調用Dispose,顯示"Base's Dispose" ((IDisposable)b).Dispose();/*****************第二個例子****************/ Derived d=new Derived(); //用d的類型調用Dispose,顯示"Derived's Dispose" d.Dispose(); //用d的對象的類型調用Dispose,顯示"Derived's Dispose" ((IDisposable)d).Dispose();/*****************第三個例子****************/ b=new Derived(); //用b的類型調用Dispose,顯示"Base's Dispose" b.Dispose(); //用b的對象的類型調用Dispose,顯示"Derived's Dispose" ((IDisposable)b).Dispose();?
轉載于:https://www.cnblogs.com/errornull/p/9905469.html
總結
以上是生活随笔為你收集整理的CLR via C#学习笔记-第十三章-定义接口、继承接口的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 万能启动利器FbinstTool引导工具
- 下一篇: 计算机准考证打印山东省招生教育,山东省教
