日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

CLR via C#学习笔记-第十三章-定义接口、继承接口

發布時間:2023/12/10 C# 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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#学习笔记-第十三章-定义接口、继承接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。