C#構造函數(shù)在基類和父類中的執(zhí)行順序
更新時間:2022年04月18日 13:56:36 作者:農碼一生
這篇文章介紹了C#構造函數(shù)在基類和父類中的執(zhí)行順序,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
一、簡介
當我們沒有在子類構造函數(shù)中寫上 base(),默認會先調用父類中無參的構造函數(shù),再調用子類。
當在有參構造函數(shù)后寫上base時,只調用子類構造函數(shù)中有參的構造函數(shù),隱藏父類無參構造函數(shù)。
二、代碼案例
父類代碼:
#region 父類
/// <summary>
/// 測試構造函數(shù)——需要被構造類 Fu
/// </summary>
class Fu
{
private int x;//一個簡單的私有字段
/// <summary>
/// 構造函數(shù)
/// </summary>
public Fu()
{
Console.WriteLine("會先調用這里:這是父類");
}
/// <summary>
/// 父類中的有參構造方法
/// </summary>
/// <param name="x"></param>
public Fu(int x)
{
this.x = x;
Console.WriteLine("x賦值完成");
}
/// <summary>
/// 父類構造C函數(shù)
/// </summary>
/// <param name="x"></param>
/// <param name="b"></param>
/// <param name="c"></param>
public Fu(int x, int b, string c)
{
this.x = x;
Console.WriteLine("x賦值完成" + x + b + c);
}
/// <summary>
/// 具有7個參數(shù)的構造函數(shù)
/// </summary>
/// <param name="a"></param>
/// <param name="a1"></param>
/// <param name="a2"></param>
/// <param name="a3"></param>
/// <param name="a4"></param>
/// <param name="a6"></param>
/// <param name="a5"></param>
public Fu(int a, int a1, int a2, int a3, int a4, int a6, int a5)
{
Console.WriteLine("最長參數(shù)構造運行");
Console.WriteLine(a + "|" + a1 + "|" + a2 + "|" + a3 + "|" + a4 + "|" + a5 + "|" + a6 + "|"); //在函數(shù)中讓傳入參數(shù)對Fu類對象進行初始化
//例如有如下多個私有字段,在類對象初始化的時候,對其變量初始化。用構造函數(shù)最為簡單
this.a = a; //傳入參數(shù),在對象實例化后,對其私有變量進行賦值操作
this.a1 = a;
this.a2 = a;
this.a3 = a;
this.a4 = a;
this.a5 = a;
this.a6 = a;
}
private int a;
private int a1;
private int a2;
private int a3;
private int a4;
private int a5;
private int a6;
}
#endregion子類代碼:
#region 子類
/// <summary>
/// 派生類繼承父類
/// </summary>
class Derived : Fu
{
/// <summary>
/// 會先調用父類的構造函數(shù),然后再調用子類這邊的有參構造函數(shù)
/// </summary>
//先調用父類無參,再調用子類無參
//當我們沒有在子類構造函數(shù)中寫上 base(),默認會先調用父類中無參的構造函數(shù),再調用子類。
public Derived() //: base() //重新構造 :調用父類中無參的構造函數(shù),在這里寫不寫調用結果一致
{
Console.WriteLine("這是派生類-無參-構造函數(shù)");
}
private int y;
/// <summary>
/// 構造函數(shù)
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// 當我們沒有在子類構造函數(shù)中 寫上 base(),默認會先調用父類中無參的構造函數(shù)
/// 當在有參構造函數(shù)后寫上base時,只調用子類構造函數(shù)中有參的構造函數(shù),隱藏父類無參構造函數(shù)
public Derived(int x, int y) /*: base(x)*/
{
this.y = y;
Console.WriteLine("這是y賦值完成");
}
/// <summary>
/// 多參數(shù)
/// </summary>
/// <param name="x"></param>
/// <param name="a"></param>
public Derived(int x, string a)// : base(x, x, x, x, x, x, x) //這里寫了 base 會先調用父類,再調用當前子類進行構造
{
y = x;
Console.WriteLine(a + "第三方法");
}
}
#endregionMain()調用:
#region Main 入口
/// <summary>
/// 程序
/// </summary>
class Program
{
/// <summary>
/// 主入口
/// </summary>
/// <param name="args"></param>
static void Main(string[] args)
{
Derived d = new Derived();
Console.WriteLine("-----------------------以上為無參構造------------------------------------------");
Derived d1 = new Derived(1, 2);
Console.WriteLine("-----------------------以上為2個參數(shù)構造---------------------------------------");
Derived d2 = new Derived(1, "1");
Console.WriteLine("-----------------------以上為2個參數(shù)構造,6個私變量----------------------------");
//先調用有參的構造函數(shù)一旦被調用,無參的構造函數(shù)都不會被調用了
//先執(zhí)行父類的構造函數(shù),才執(zhí)行子類的
Console.ReadLine();
}
}
#endregion三、輸出結果
會先調用這里:這是父類 這是派生類-無參-構造函數(shù) -----------------------以上為無參構造------------------------------------------ 會先調用這里:這是父類 這是y賦值完成 -----------------------以上為2個參數(shù)構造--------------------------------------- 最長參數(shù)構造運行 1|1|1|1|1|1|1| 1第三方法 -----------------------以上為2個參數(shù)構造,6個私變量----------------------------
到此這篇關于C#構造函數(shù)在基類和父類中執(zhí)行順序的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Unity編輯器預制體工具類PrefabUtility常用函數(shù)和用法
這篇文章主要為大家介紹了Unity編輯器預制體工具類PrefabUtility常用函數(shù)及用法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已安裝軟件變化的方法
這篇文章主要介紹了C#實現(xiàn)讀取注冊表監(jiān)控當前操作系統(tǒng)已安裝軟件變化的方法,涉及C#針對注冊表的讀取與監(jiān)控技巧,非常具有實用價值,需要的朋友可以參考下2015-08-08

