C#接口(Interface)用法分析
本文實(shí)例分析了C#接口(Interface)用法。分享給大家供大家參考。具體分析如下:
繼承"基類(lèi)"跟繼承"接口"都能實(shí)現(xiàn)某些相同的功能,但有些接口能夠完成的功能是只用基類(lèi)無(wú)法實(shí)現(xiàn)的
1.接口用于描述一組類(lèi)的公共方法/公共屬性. 它不實(shí)現(xiàn)任何的方法或?qū)傩?,只是告訴繼承它的類(lèi)至少要實(shí)現(xiàn)哪些功能,繼承它的類(lèi)可以增加自己的方法.
2.使用接口可以使繼承它的類(lèi): 命名統(tǒng)一/規(guī)范,易于維護(hù).比如: 兩個(gè)類(lèi) "狗"和"貓",如果它們都繼承了接口"動(dòng)物",其中動(dòng)物里面有個(gè)方法Behavior(),那么狗和貓必須得實(shí)現(xiàn)Behavior()方法,
并且都命名為Behavior這樣就不會(huì)出現(xiàn)命名太雜亂的現(xiàn)象.如果命名不是Behavior(),接口會(huì)約束即不按接口約束命名編譯不會(huì)通過(guò).
3.提供永遠(yuǎn)的接口。 當(dāng)類(lèi)增加時(shí),現(xiàn)有接口方法能夠滿足繼承類(lèi)中的大多數(shù)方法,沒(méi)必要重新給新類(lèi)設(shè)計(jì)一組方法,也節(jié)省了代碼,提高了開(kāi)發(fā)效率.
舉個(gè)代碼示例:
//公共接口: "動(dòng)物"
public Interface IAnimal
{
int EyeNumber;
private void Behavior();//行為方法,描述各種動(dòng)物的特性
}
//類(lèi): 狗
public Dog : IAnimal
{
string ActiveTime = "白天";
private void Behavior()
{
{
Console.Write("我晚上睡覺(jué),白天活動(dòng)");
}
}
//類(lèi): 貓
public Cat: IAnimal
{
string ActiveTime = "夜晚";
private void Behavior()
{ {
Console.Write("我白天睡覺(jué),晚上活動(dòng)");
}
}
//簡(jiǎn)單的應(yīng)用:
public static Main()
{
Dog myDog = new Dog();
myDog.Behavior(); //輸出: "我晚上睡覺(jué),白天活動(dòng)"
Cat myCat = new Cat();
myCat.Behavior(); //輸出: "我白天睡覺(jué),晚上活動(dòng)"
}
以上調(diào)用不同的類(lèi)的相同名方法,會(huì)輸出不同的東東,也就是說(shuō)每個(gè)類(lèi)里面的同名方法完成的功能可以是完全不同的.
更進(jìn)一步,不是用上面Main方法這樣一個(gè)一個(gè)調(diào)用類(lèi)的方法,用多態(tài)性實(shí)現(xiàn)其調(diào)用.
看一下下面這個(gè)方法:
public Behavior(IAnimal myIanimal)
{
myIanimal.Behavior();
}
其參數(shù)是<<接口類(lèi)型>>,任何繼承它的類(lèi)都可以調(diào)用此方法,此方法能根據(jù)類(lèi)的不同調(diào)用不同的類(lèi)中的方法. 也即能夠自己根據(jù)不同的類(lèi),完成不同的類(lèi)的功能.
多態(tài)性代碼示例:
Dog myDog = new Dog(); Cat myCat = new Cat(); Behavior(myDog); //Behavior接受“狗”類(lèi)實(shí)例 Behavior(myCat); //Behavior接受“狗”類(lèi)實(shí)例
這樣Behavior方法寫(xiě)一次就能完成所有繼承它的類(lèi)中的相同名方法的不同功能. 非常方便,同樣,由于“動(dòng)物軟件”功能需求,需要再增加一個(gè)"龜"類(lèi):
//類(lèi): 龜
public Tortoise: IAnimal
{
string ActiveTime = "很難說(shuō)";
private void Behavior()
{
{
Console.Write("我可以不活動(dòng),一睡就睡五千年!");
}
}
那么也可以調(diào)用上面多態(tài)方法,所以說(shuō)接口使方法具有較好擴(kuò)展性.
如果繼承它的類(lèi)很多的話,有多少好處是可想而知的!
另外, 也有抽象類(lèi)能夠?qū)崿F(xiàn)但接口不能實(shí)現(xiàn)的情況:
1. 在抽象類(lèi)中可以加代碼邏輯,但接口不能.
2. 如果要在接口中增加一個(gè)方法, 所有實(shí)現(xiàn)它的類(lèi)都強(qiáng)制重載一遍此方法, 如果重載類(lèi)很多時(shí), 會(huì)增大工作量.
總之, 一般在僅實(shí)現(xiàn)單繼承用途時(shí), 盡量用抽象類(lèi), 功能也更強(qiáng)些!
希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
相關(guān)文章
C#實(shí)現(xiàn)XSL轉(zhuǎn)換的方法
這篇文章主要介紹了C#實(shí)現(xiàn)XSL轉(zhuǎn)換的方法,結(jié)合實(shí)例分析了C#執(zhí)行XSL轉(zhuǎn)換XML的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能
最近小編接到一個(gè)功能需要實(shí)現(xiàn)一個(gè)提示框并且能自動(dòng)關(guān)閉的,看到這個(gè)需求真是懵了,四處搜集資料才搞定,接下來(lái)通過(guò)本文給大家分享C#實(shí)現(xiàn)倒計(jì)時(shí)關(guān)閉提示框功能,感興趣的朋友跟隨小編一起看看吧2019-07-07
C#調(diào)用dll報(bào)錯(cuò):無(wú)法加載dll,找不到指定模塊的解決
這篇文章主要介紹了C#調(diào)用dll報(bào)錯(cuò):無(wú)法加載dll,找不到指定模塊的解決問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
基于C#動(dòng)手實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器Web Server
這篇文章主要為大家詳細(xì)介紹了基于C#動(dòng)手實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器Web Server,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
時(shí)間戳與時(shí)間相互轉(zhuǎn)換(php .net精確到毫秒)
本文給大家分享的時(shí)間戳與時(shí)間相互轉(zhuǎn)換(php .net精確到毫秒) ,感興趣的朋友一起學(xué)習(xí)吧2015-09-09

