今天在搜尋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