面向?qū)ο缶幊痰娜筇匦浴庋b、繼承蔼夜、多態(tài)。這里要介紹一下繼承压昼,其他二者有機(jī)會(huì)在做介紹求冷。
本文討論的是在C#下的繼承,自然要簡(jiǎn)單說(shuō)下C#的繼承都支持哪些東西窍霞。
關(guān)于Class:
- 首要的是匠题,C#不支持多重繼承,相對(duì)于C++的多重繼承(一個(gè)class派生自多個(gè)class官撼,可以擁有多個(gè)class的特性梧躺,類(lèi)似四不像),C#可以用一個(gè)父類(lèi)加上多個(gè)接口的方式實(shí)現(xiàn)類(lèi)似的功能。
- C#除去類(lèi)繼承之外(廢話(huà))掠哥,還支持接口繼承巩踏,方便實(shí)現(xiàn)很多復(fù)雜的功能。所有類(lèi)的基類(lèi)是System.Object续搀。
關(guān)于Struct:
- Struct是不支持繼承的靠柑,而且系統(tǒng)為結(jié)構(gòu)體提供的無(wú)參數(shù)構(gòu)造器跟压,不允許修改
- Struct本身是值類(lèi)型呛凶,非引用類(lèi)型谣光,賦值操作等等,跟class也是有很多本質(zhì)區(qū)別的牵咙,在這里不過(guò)多闡述派近。
1.實(shí)現(xiàn)繼承
class BaseClass{
public vitual string VitualMethod{
return "This method is virtual and defined in BaseClass";
}
}
class DerivedClass:BaseClass
{
public override string VitualMethod()
{
return "This method is override in DerivedClass";
}
}
- vitual 標(biāo)記的函數(shù),在子類(lèi)中都可以重寫(xiě)洁桌,未標(biāo)記的話(huà)渴丸,子類(lèi)無(wú)法重寫(xiě)
- 子類(lèi)重寫(xiě)時(shí),需要用override標(biāo)記
- 屬性同樣適用
2.base關(guān)鍵字
class Account
{
public virtual double Price()
{
return 100;
}
}
class SalesAccount:Account
{
public override double Price()
{
return base.Price() * 0.85;
}
}
- 使用base關(guān)鍵字另凌,可以直接調(diào)所繼承類(lèi)的方法谱轨。注意的是繼承的類(lèi),不是基類(lèi)吠谢,連續(xù)繼承的時(shí)候要搞清楚土童!
3.密封類(lèi)與密封方法(sealed關(guān)鍵字)
sealed class LastClass
{
}
class DerivedClass:LastClass
{
}
- 用sealed標(biāo)記的類(lèi)或者方法都不能被繼承,防止方法或者內(nèi)容被破壞工坊。string就是一個(gè)密封類(lèi)献汗,很多系統(tǒng)類(lèi)都是。
4.修飾符
修飾符 | 說(shuō)明 |
---|---|
public | 共有王污,所有人都可以訪問(wèn) |
private | 私有雀瓢,只有本類(lèi)可以訪問(wèn) |
protect | 受保護(hù)的,只有本類(lèi)及子類(lèi)可以訪問(wèn) |
internal | 只有在類(lèi)所在的程序集可以訪問(wèn) |
- 常用的肯定就是前兩者了玉掸,不過(guò)考慮到有一些類(lèi)的特殊性,在創(chuàng)建類(lèi)的時(shí)候醒叁,應(yīng)該考慮是否應(yīng)該使用protect屬性修飾司浪,防止今后產(chǎn)生bug。
5.接口
相比于繼承把沼,接口使用起來(lái)更加靈活啊易,并且支持多繼承。筆者的項(xiàng)目中經(jīng)常使用到接口饮睬,一個(gè)類(lèi)只能繼承一個(gè)父類(lèi)租谈,但是可以有多個(gè)接口,方便了使用。接口可以理解為一組方法的集合割去,且方法
public interface IInterface
{
void Method();
}
- 接口用interface標(biāo)記
- 繼承接口的類(lèi)實(shí)現(xiàn)接口方法
- 接口描述了多個(gè)類(lèi)共同的窟却、不同實(shí)現(xiàn)的方法
- 接口可以繼承
- 繼承子接口的類(lèi),不僅要實(shí)現(xiàn)子接口的方法呻逆,同樣也要實(shí)現(xiàn)父接口的方法夸赫。