最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中子類調(diào)用父類的實現(xiàn)方法

 更新時間:2014年09月04日 15:34:38   投稿:shichen2014  
這篇文章主要介紹了C#中子類調(diào)用父類的實現(xiàn)方法,通過實例逐步分析了類中初始化構(gòu)造函數(shù)的執(zhí)行順序問題,有助于加深對C#面向?qū)ο蟪绦蛟O(shè)計的理解,需要的朋友可以參考下

本文實例講述了C#中實現(xiàn)子類調(diào)用父類的方法,分享給大家供大家參考之用。具體方法如下:

一、通過子類無參構(gòu)造函數(shù)創(chuàng)建子類實例

創(chuàng)建父類Person和子類Student。

public class Person
{
    public Person()
    {
      Console.WriteLine("我是人");
    }
}
public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學(xué)生");
    }
}

在客戶端通過子類無參構(gòu)造函數(shù)創(chuàng)建子類實例。

class Program
{
    static void Main(string[] args)
    {
      Student student = new Student();
      Console.ReadKey();
    }
}

輸出結(jié)果:

我是人
我是學(xué)生

可見:通過調(diào)用子類無參構(gòu)造函數(shù)創(chuàng)建子類實例,會默認(rèn)調(diào)用父類無參構(gòu)造函數(shù)。

如果把父類的無參構(gòu)造函數(shù)去掉,會怎樣呢?
--結(jié)果會報"Person不包含0個參數(shù)的構(gòu)造函數(shù)"錯。

二、通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例

再同時為子類和父類添加有參構(gòu)造函數(shù)。

public class Person
{
    public Person()
    {
      Console.WriteLine("我是人");
    }
    public Person(string name)
    {
      Console.WriteLine("我是人,我的名字叫{0}", name);
    }
}
public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學(xué)生");
    }
    public Student(string name)
    {
      Console.WriteLine("我是學(xué)生,我的名字叫{0}", name);
    }
}

在客戶端通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例。

Student student = new Student("小明");
Console.ReadKey();

輸出結(jié)果:

我是人
我是學(xué)生,我的名字叫小明

可見:通過調(diào)用子類有參構(gòu)造函數(shù),同樣默認(rèn)會調(diào)用父類無參構(gòu)造函數(shù)。

三、在子類中明確指出調(diào)用哪個父類構(gòu)造函數(shù)

以上,默認(rèn)調(diào)用了父類的無參構(gòu)造函數(shù),但如何調(diào)用父類的有參構(gòu)造函數(shù)呢?
--在子類中使用base

在子類Student中的有參構(gòu)造函數(shù)中使用base,明確調(diào)用父類有參構(gòu)造函數(shù)。

public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學(xué)生");
    }
    public Student(string name)
      : base(name)
    {
      Console.WriteLine("我是學(xué)生,我的名字叫{0}", name);
    }
}

客戶端

Student student = new Student("小明");
Console.ReadKey();

輸出結(jié)果:

我是人,我的名字叫小明
我是學(xué)生,我的名字叫小明

四、通過子類設(shè)置父類的公共屬性

在父類Person中增加一個Name公共屬性,并在父類的構(gòu)造函數(shù)中對Name屬性賦值。

public class Person
{
    public string Name { get; set; }
    public Person()
    {
      Console.WriteLine("我是人");
    }
    public Person(string name)
    {
      this.Name = name;
      Console.WriteLine("我是人,我的名字叫{0}", name);
    }
}

在客戶端:

Student student = new Student("小明");
Console.WriteLine("子類獲取父類的Name屬性值為{0}", student.Name);
Console.ReadKey();  

輸出結(jié)果:

我是人,我的名字叫小明
我是學(xué)生,我的名字叫小明 
子類獲取父類的Name屬性值為小明 

以上代碼的執(zhí)行路徑是:

→調(diào)用子類有參構(gòu)造函數(shù),并把該參數(shù)傳值給父類有參構(gòu)造函數(shù)
→調(diào)用父類有參構(gòu)造函數(shù),并給父類公共屬性Name賦值
→子類實例調(diào)用父類的公共屬性

其實,以上的做法在分層架構(gòu)設(shè)計中已經(jīng)得到了很好的使用。在分層架構(gòu)中,通常會為所有的Repository創(chuàng)建一個基類,在基類中設(shè)計一個代表當(dāng)前Repository的屬性,并在基類的構(gòu)造函數(shù)中為該屬性賦值;最終,在創(chuàng)建子類Repository實例時,在為基類的、代表當(dāng)前Repository的公共屬性賦值。

在子類中,當(dāng)父類通過base拿到子類的參數(shù)時,還可以對該參數(shù)做一些處理,比如代表父類的base把從子類拿到的參數(shù)轉(zhuǎn)換成大寫。

public class Student : Person
{
    public Student()
    {
      Console.WriteLine("我是學(xué)生");
    }
    public Student(string name)
      : base(ConvertToUpper(name))
    {
      Console.WriteLine("我是學(xué)生,我的名字叫{0}", name);
    }
    private static string ConvertToUpper(string name)
    {
      return name.ToUpper();
    }
}

輸出結(jié)果:

我是人,我的名字叫DARREN
我是學(xué)生,我的名字叫darren
子類獲取父類的Name屬性值為DARREN

總結(jié):

①.通過子類無參構(gòu)造函數(shù)創(chuàng)建子類實例,會默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)
②.通過子類有參構(gòu)造函數(shù)創(chuàng)建子類實例,也會默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)
③.在子類構(gòu)造函數(shù)中通過base關(guān)鍵字指明父類構(gòu)造函數(shù),當(dāng)通過子類構(gòu)造函數(shù)創(chuàng)建實例,會調(diào)用指明的、父類的構(gòu)造函數(shù)
④.父類的公共屬性可以通過子類來賦值,子類也可以獲取到父類的公共屬性

相信通過本文上述實例的分析,可以加深大家對C#類的初始化與繼承的理解。希望本文所述對大家進(jìn)一步的學(xué)習(xí)C#程序設(shè)計有所幫助。

相關(guān)文章

  • 深入C#判斷操作系統(tǒng)類型的總結(jié)詳解

    深入C#判斷操作系統(tǒng)類型的總結(jié)詳解

    本篇文章是對在C#中判斷操作系統(tǒng)類型的總結(jié)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中的尾遞歸與Continuation詳解

    C#中的尾遞歸與Continuation詳解

    這篇文章主要介紹了C#中的尾遞歸與Continuation詳解,本文講解了遞歸與尾遞歸、尾遞歸與Continuation、Continuation的改進(jìn)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • C#獲取存儲過程返回值和輸出參數(shù)值的方法

    C#獲取存儲過程返回值和輸出參數(shù)值的方法

    這篇文章主要介紹了C#獲取存儲過程返回值和輸出參數(shù)值的方法,有需要的朋友可以參考一下
    2014-01-01
  • C#面向?qū)ο筇卣鞯木唧w實現(xiàn)及作用詳解

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

    所有的面相對象思想,歸根結(jié)底是為了簡化代碼,減少代碼量,構(gòu)建更符合現(xiàn)實生活邏輯的程序代碼,從而減輕程序員的負(fù)擔(dān)。不能一味地或者說刻意地去使用面相對象的思想而忽略了程序所實現(xiàn)的功能或者框架,要根據(jù)實際情況
    2013-10-10
  • 輕松學(xué)習(xí)C#的運算符

    輕松學(xué)習(xí)C#的運算符

    輕松學(xué)習(xí)C#的運算符,對C#的運算符感興趣的朋友可以參考本篇文章,幫助大家更靈活的運用C#的運算符
    2015-11-11
  • Url相對路徑的問題總結(jié)

    Url相對路徑的問題總結(jié)

    很多時候,我們在圖片或者其他(a標(biāo)簽,flash)中指定鏈接的時候,我們需要選擇是使用絕對路徑,或者是相對路徑.
    2012-11-11
  • C#連接Oracle數(shù)據(jù)庫字符串(引入DLL)的方式

    C#連接Oracle數(shù)據(jù)庫字符串(引入DLL)的方式

    這篇文章主要給大家介紹了關(guān)于C#連接Oracle數(shù)據(jù)庫字符串(引入DLL)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • WinForm DataGridView控件隔行變色的小例子

    WinForm DataGridView控件隔行變色的小例子

    WinForm的DataGridView控件設(shè)置行的顏色
    2013-03-03
  • C# 3DES加密詳解

    C# 3DES加密詳解

    3Des對每個數(shù)據(jù)塊進(jìn)行了三次的DES加密算法,是DES的一個更安全的變形。比起最初的DES,3DES更為安全。下面我們來看下在C#中的3DES加密方式的使用
    2015-06-06
  • C#、vb.net及SQL判斷指定年份是否為閏年的方法

    C#、vb.net及SQL判斷指定年份是否為閏年的方法

    這篇文章主要介紹了C#、vb.net及SQL判斷指定年份是否為閏年的方法,分別以三種方法實現(xiàn)了判斷閏年的功能,在進(jìn)行項目開發(fā)中具有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11

最新評論

如皋市| 广丰县| 汉中市| 鲁山县| 黄陵县| 邵武市| 石狮市| 邳州市| 都安| 伊吾县| 仙游县| 仁寿县| 桓仁| 都昌县| 洱源县| 凤城市| 乐昌市| 红河县| 离岛区| 丰城市| 五原县| 哈密市| 鹤峰县| 横山县| 理塘县| 宝应县| 育儿| 安乡县| 沅陵县| 平潭县| 特克斯县| 邹平县| 元氏县| 孝昌县| 萝北县| 阿图什市| 武强县| 玉林市| 通渭县| 襄汾县| 东乌珠穆沁旗|