[.net C#] Constructor Chaining 建構式存取父類別或子類別(:this 或 :base)的成員筆記

今天在搜尋Constructor Chaining的相關文章

Constructor Chaining 建構式存取父類別或子類別(:this 或 :base)的成員

發現繁體中文好像沒人翻譯

所以不曉得要叫做 建構式鏈? 鏈結建構式? 還是大家覺得不翻比較好

this的部分大意就是在一個class內有多個建構式,這些建構式有些重複的code

可以透過Constructor Chaining的方式減少重複的code

base的部分適用於子類別繼承父類別

看了這幾篇篇文章覺得蠻清楚的
https://dotblogs.com.tw/rainmaker/2014/11/11/147267

http://stackoverflow.com/questions/1814953/c-sharp-constructor-chaining-how-to-do-it

http://notepad.yehyeh.net/Content/CSharp/CH01/03ObjectOrient/5thisAndBase/index.php

自己做一個小測試

class showText {
	public string TextOne { set; get; }
	public string TextTwo { set; get; }
	public showText()
	{
		TextOne = "Hello";
	}
	public showText(string UserName):this()
	{
		TextTwo = UserName;
	}
}

 

static void Main(string[] args)
{
	#region 範例1
	//第一個建構式沒有鏈結第二個建構式,所以結果只會顯示"Hello"後面是空的
	showText _showText_A = new showText();
	//第二個建構式有鏈結第一個建構式,所以結果會有"Hello"也會有"Sam"
	showText _showText_B = new showText("Sam");
	//印出_showText_A結果
	Console.Write(_showText_A.TextOne);
	Console.WriteLine(_showText_A.TextTwo);

	//印出_showText_B結果
	Console.Write(_showText_B.TextOne);
	Console.WriteLine(_showText_B.TextTwo);
	#endregion

	Console.Read();
}

 

輸出結果

第二個小測試

class showNumber
{
	public int NumOne { set; get; }
	public int NumTwo { set; get; }
	public int NumSum { set; get; }
	public string SubjectName { set; get; }
	public showNumber()
	{
		NumOne = 3;
	}
	public showNumber(int Num) : this()
	{
		NumTwo = Num;
	}

	public showNumber(string _SubjectName) :this(9)
	{
		NumSum = NumOne + NumTwo;
		SubjectName = _SubjectName;
	}
}
static void Main(string[] args)
{
	#region 範例2
	//第二個建構式鏈結了第一個建構式,所以初始化的如果是第二個建構式會同時有NumOne及NumTwo的值
	//第三個建構式又鏈結了第二個,所以除了第三個建構式自己初始化時設定的值以外同時會有NumOne及NumTwo的值
	showNumber _showNumber_Obj = new showNumber("英文成績單 : ");
	Console.WriteLine(_showNumber_Obj.SubjectName);
	Console.WriteLine("項目1 : " + _showNumber_Obj.NumOne);
	Console.WriteLine("項目2 : " + _showNumber_Obj.NumTwo);
	Console.WriteLine("總計 : " + _showNumber_Obj.NumSum);
	#endregion

	Console.Read();
}

輸出結果

範例檔:

https://bitbucket.org/yu_allen/constructorchainingexercise/src