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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > C# >内容正文

C#

C#语言使用多态(接口与override) ——帮您剔除对面向对象多态性的疑惑

發(fā)布時(shí)間:2023/12/2 C# 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#语言使用多态(接口与override) ——帮您剔除对面向对象多态性的疑惑 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

多態(tài)是面向?qū)ο缶幊讨腥髾C(jī)制之一,其原理建立在"從父類繼承而來(lái)的子類可以轉(zhuǎn)換為其父類"這個(gè)規(guī)則之上,換句話說(shuō),能用父類的地方,就能用該類的子類.當(dāng)從父類派生了很多子類時(shí),由于每個(gè)子類都有其不同的代碼實(shí)現(xiàn),所以當(dāng)用父類來(lái)引用這些子類時(shí),同樣的操作而可以表現(xiàn)出不同的操作結(jié)果,這就是所謂的多態(tài).

● 編譯時(shí)的多態(tài)性
  編譯時(shí)的多態(tài)性是通過(guò)重載來(lái)實(shí)現(xiàn)的。對(duì)于非虛的成員來(lái)說(shuō),系統(tǒng)在編譯時(shí),根據(jù)傳遞的參數(shù)、返回的類型等信息決定實(shí)現(xiàn)何種操作。

● 運(yùn)行時(shí)的多態(tài)性
  運(yùn)行時(shí)的多態(tài)性就是指直到系統(tǒng)運(yùn)行時(shí),才根據(jù)實(shí)際情況決定實(shí)現(xiàn)何種操作。C#中,運(yùn)行時(shí)的多態(tài)性通過(guò)虛成員實(shí)現(xiàn)或者接口。

編譯時(shí)多態(tài)即函數(shù)重載,我這里不多說(shuō)了以下主要是通過(guò)override和Interface實(shí)現(xiàn)的多態(tài)。

一、Override。首先來(lái)創(chuàng)建三個(gè)類,一個(gè)是父類Base,其他兩個(gè)是繼承于Base的A類和B類,代碼如下

View Code class Base{public virtual void Method(){Console.WriteLine("我是父類的虛方法");}}class A : Base{public override void Method(){Console.WriteLine("我是A類的重寫父類方法");}}class B : Base{public override void Method(){Console.WriteLine("我是B類的重寫父類方法");}}

然后在Main方法里面去調(diào)用它們

View Code class Program{static void Main(string[] args){overrideDemo();}static void overrideDemo(){//創(chuàng)建一個(gè)父類的數(shù)組Base[] bases = new Base[] { new A(), new B() };foreach(var item in bases){item.Method();}}}

運(yùn)行結(jié)果如下

發(fā)現(xiàn)父類的Method方法根本就沒(méi)有運(yùn)行,也就是數(shù)組雖然是Base類型,但是他們分別是A類和B類的實(shí)例,而這兩個(gè)類對(duì)Method方法進(jìn)行了override,因而執(zhí)行的是他們重寫的函數(shù),而接口也是類似的,不同的是我們不需要override關(guān)鍵字。

View Code public interface IBase{void Method();}public class C : IBase{public void Method(){Console.WriteLine("我是C類實(shí)現(xiàn)接口的方法");}}public class D : IBase{public void Method(){Console.WriteLine("我是D類實(shí)現(xiàn)接口的方法");}}

調(diào)用示例:

View Code static void Main(string[] args){interfaceDemo();}static void interfaceDemo(){//創(chuàng)建一個(gè)接口的數(shù)組IBase[] bases = new IBase[] { new C(), new D() };foreach (var item in bases){item.Method();}}

運(yùn)行結(jié)果和上面的類似,雖然類型相同,但是是誰(shuí)的實(shí)例就調(diào)用誰(shuí)的方法,彼此獨(dú)立。

多態(tài)的運(yùn)用場(chǎng)景很多,特別是在設(shè)計(jì)模式當(dāng)中,幾乎是離不開多態(tài),但是并不是說(shuō)繼承就很棒,如果我們的程序有很深的繼承層次,將會(huì)提高耦合度,程序則變得復(fù)雜。我們使用多態(tài)的思想就是,抽象他們的共同點(diǎn),不去考慮他們的具體實(shí)現(xiàn)。

理論的東西我就不羅嗦了,這里給一個(gè)實(shí)際當(dāng)中使用的例子

http://www.cnblogs.com/FreeDong/archive/2012/08/11/2627198.html

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/FreeDong/archive/2012/08/11/2626312.html

總結(jié)

以上是生活随笔為你收集整理的C#语言使用多态(接口与override) ——帮您剔除对面向对象多态性的疑惑的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。