欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#面向?qū)ο筇卣鞯木唧w實(shí)現(xiàn)及作用詳解

 更新時(shí)間:2013年10月25日 08:55:46   作者:  
所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實(shí)生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實(shí)現(xiàn)的功能或者框架,要根據(jù)實(shí)際情況

眾所周知,面向?qū)ο缶幊痰奶攸c(diǎn)為:封裝、繼承、多態(tài)。C#是一門完全面向?qū)ο蟮恼Z言,由于比Java推出的時(shí)間還要晚,所以對面向?qū)ο蟮乃枷氲捏w現(xiàn)比Java還要完美,那么在C#中如何體現(xiàn)封裝、繼承和多態(tài)呢?下面舉例并進(jìn)行說明。

1.封裝

封裝的好處有以下幾點(diǎn):

①數(shù)據(jù)不外泄,可以做到一定的保護(hù)

②類的使用者不用考慮具體的數(shù)據(jù)運(yùn)算,方便

③程序結(jié)構(gòu)性強(qiáng),層次清晰,便于維護(hù)

對相關(guān)的字段、方法進(jìn)行封裝固然對面向?qū)ο缶幊唐鸬讲豢扇鄙俚闹匾饔?,但并不代表不可以訪問類或者說具體的實(shí)例化對象中的內(nèi)容,而且為使用者提供接口,僅僅讓他們調(diào)用就可以了,他們只做他們的工作,不需要考慮或者顧及你寫的類具體是做什么的,更不用考慮你寫的每一行代碼是什么意思。

在C#中,對于變量的封裝,往往將需要被在本類以外調(diào)用的,以屬性的形式出現(xiàn),而不像C++中是直接以public成員或者private成員加上相關(guān)的方法調(diào)用,那樣要么不符合面向?qū)ο蟮奶攸c(diǎn),要么太麻煩。

C#中屬性的聲明:

復(fù)制代碼 代碼如下:

public class TestClass
    {
        public string Info
        {
            get;
            set;
        }
    }

屬性的聲明類似一個(gè)函數(shù),首先有訪問級別(如果設(shè)成private等于設(shè)成私有字段,還不如直接寫個(gè)變量),然后是類型,接著是屬性名,后面是一對花括號(hào),里面的get、set用于控制屬性只讀,還是只寫,還是可讀可寫。當(dāng)然,這里的get、set都是直接以分號(hào)結(jié)束,被稱作是自動(dòng)屬性,如果有需要,也可以自定義get和set,get中需要加上和屬性類型一直的返回類型。

C#對方法的封裝只需要改變方法的訪問級別,比如設(shè)為public,或者設(shè)為private(或者不寫),對應(yīng)的就是可從外部訪問以及僅能從內(nèi)部訪問。

2.繼承

大家都知道繼承機(jī)制可以提高代碼的可復(fù)用性和可擴(kuò)展性,以提高開發(fā)效率,減少代碼量。C#和C++不同,可從一個(gè)類繼承或?qū)崿F(xiàn)多個(gè)接口,但不可以從多個(gè)類繼承。

繼承語法示例:

復(fù)制代碼 代碼如下:

class Son : Father
{
      //Do Something
}

繼承可以使子類或者說派生類獲得父類或者說基類的所有可被繼承的內(nèi)容,比如字段、方法,但對訪問級別有一定限制,那就是private級別不可被繼承。除了這點(diǎn),這里需要說明的是,如果需要調(diào)用基類(父類)中的成員,需要使用base關(guān)鍵字,而如果在方法中,需要使用當(dāng)前類中的成員,但因?yàn)橹孛ū热鐓?shù)和類成員變量重名),需要使用this關(guān)鍵字來確定到底訪問的是哪個(gè)成員。

C#所有的類都繼承自System.Object,所以不管是什么類都有幾個(gè)固定的、公共的方法,這是C#體現(xiàn)面向?qū)ο笏枷敕浅2诲e(cuò)的一點(diǎn)!

下來說一下靜態(tài)類的特征:

①靜態(tài)類不能使用sealed或abstract修飾符

②靜態(tài)類必須直接繼承自System.Object,不能是其他

③靜態(tài)類不能實(shí)現(xiàn)任何接口

④靜態(tài)類不能包含任何操作符

⑤靜態(tài)類不能包含使用protected或protected internal修飾的靜態(tài)成員

⑥靜態(tài)類智能包含靜態(tài)成員

⑦靜態(tài)類可以包含靜態(tài)構(gòu)造函數(shù),但不能包含實(shí)例構(gòu)造函數(shù)

⑧靜態(tài)類不能被實(shí)例化

⑨靜態(tài)類是密封的,不能被繼承

由于靜態(tài)類是在加載包含該類的程序集時(shí)由CLR自動(dòng)加載,所以用靜態(tài)類實(shí)現(xiàn)一些不操作數(shù)據(jù),并且不與代碼中的特定對象關(guān)聯(lián)的方法是非常不錯(cuò)的選擇。

剩下要注意的就是在使用繼承的時(shí)候,搞清構(gòu)造函數(shù)的調(diào)用順序,先初始化類的實(shí)例字段,再調(diào)用基類構(gòu)造函數(shù),最后調(diào)用自己的構(gòu)造函數(shù)。

3.多態(tài)

通過基類的引用調(diào)用在派生類中實(shí)現(xiàn)的方法時(shí),不同的派生類將產(chǎn)生不同的調(diào)用結(jié)果,這就是多態(tài),而C#中的多態(tài)分為運(yùn)行時(shí)多態(tài)和編譯時(shí)多態(tài)。編譯時(shí)多態(tài)利用函數(shù)重載實(shí)現(xiàn),運(yùn)行時(shí)多態(tài)通過覆寫虛方法實(shí)現(xiàn)。

①方法重載

前提:在同一個(gè)類中,方法名相同,方法簽名不同(包括方法的名稱及參數(shù)信息(形參的修飾符、數(shù)目、類型以及泛型參數(shù)的數(shù)目),但返回值類型、形參和類型參數(shù)的名稱并不屬于方法簽名的一部分)

方法重載示例:

復(fù)制代碼 代碼如下:

public string Function(int x)
{
 return x.ToString();
}
public string Function(DateTime x)
{
 return x.ToString("yyyy-MM-dd HH:mm:ss.fff");
}
public string Function(double x,double y)
{
 return (x+y).ToString();
}

以上示例實(shí)現(xiàn)了一個(gè)名為Function,返回類型為string的三種重載,分別是將一個(gè)int型參數(shù)返回為string型,將一個(gè)DateTime型參數(shù)返回為“年-月-日 時(shí):分:秒.毫秒”格式的字符串,將兩個(gè)double型參數(shù)相加的和轉(zhuǎn)換為string類型

②虛方法

定義虛方法需要使用virtual關(guān)鍵字,如下所示:

復(fù)制代碼 代碼如下:

class Car
{
 public virtual void Drive()
 {
  Console.WriteLine("駕駛..");
 }
}

之所以將Drive設(shè)置為虛方法,就是為了讓派生的子類去重寫,這樣所有Car的派生類都可以實(shí)現(xiàn)新的Drive方法。

注意:virtual關(guān)鍵字必須位于返回方法的返回類型之前,虛方法可以有方法體,而抽象方法不允許有方法體

剩下兩項(xiàng)注意:靜態(tài)成員函數(shù)不能是虛函數(shù),構(gòu)造函數(shù)不能是虛函數(shù)

覆寫方法示例:

復(fù)制代碼 代碼如下:

class Track : Car
{
 public override void Drive()
 {
  Console.WriteLine("開大卡車");
 }
}
class Jeep : Car
{
 public override void Drive()
 {
  Console.WriteLine("開吉普車");
 }
}

③抽象類及抽象方法
有以下幾點(diǎn)注意:(1)它們不能被實(shí)例化(2)抽象方法不能有方法體,所在類必須是抽象類(3)使用abstract關(guān)鍵字(4)抽象方法無實(shí)現(xiàn),后面緊跟分號(hào)(5)抽象類的派生類必須實(shí)現(xiàn)所有抽象方法(6)當(dāng)抽象類從基類繼承虛方法時(shí),抽象類可以使用抽象方法重寫該虛方法。

具體的例子就不舉了

4.總結(jié)

所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實(shí)生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實(shí)現(xiàn)的功能或者框架,要根據(jù)實(shí)際情況,合理利用面相對象思想,減輕負(fù)擔(dān),并為他人提供方便!

相關(guān)文章

最新評論