OOP C# 第二天上課內容
第二天連續性的轟炸你的邏輯第二天,今天上課約下午兩點頭腦已經當機了,廢話不多說開始筆記第二天內容。
1.建構式
當一個類別建立時,類別首先呼叫的函式稱為建構式,也可以當作一個類別當在初始化的方法。
建構式有一點特別,列出以下幾點
- 建構式本身不能繼承。
- 在class中建構式名稱與class相同
- 不具有回傳值
- 經過編譯過後視為方法,當class使用時會先利用建構式初始化class
public class A
{
public A()
{
//嗨我是建構式
}
}
我們來繼承一下class看看建構式的流程
class Program
{
static void Main(string[] args)
{
C X = new C();
Console.ReadLine();
}
}
class
public class A
{
protected string _str;
public A()
{
_str = "嗨我是建構式";
Console.WriteLine("我被A初始化了" + _str);
}
}
public class B : A
{
public B()
{
Console.WriteLine("我被B初始化了" + _str);
}
}
public class C : B
{
public C()
{
Console.WriteLine("我被C初始化了" + _str);
}
}
產生的結果:

我們會發現在於new C的時候會依照繼承關係去尋找父類別,再從父類別的建構式依序執行到子類別。
關於建構式本身為什麼不能繼承呢?因為本身建構式後面揹著嘿嘿~!。以下程式碼請關燈看背後在看程式碼(不要鬧了往下看)
public class A
{
protected string _str;
public A()
{
_str = "嗨我是建構式";
Console.WriteLine("我被A初始化了" + _str);
}
}
public class B : A
{
public B() : base() //多了base
{
Console.WriteLine("我被B初始化了" + _str);
}
}
public class C : B
{
public C() : base() //多了base
{
Console.WriteLine("我被C初始化了" + _str);
}
}
base本身代表著去尋找繼承的父類別的建構式
public class A
{
protected string _str;
public A(string talk)
{
_str = talk;
Console.WriteLine(_str+"呼叫天龍A");
}
}
public class B : A
{
public B() : base("天龍B") //多了base
{
Console.WriteLine(_str + "呼叫長江一號");
}
}
藉由以上的劇情發展應該你快速的了解到base在幹嘛了。
接著建構式本身也是可以用多載的方式
class
public class A
{
private string x;
private string y;
public A()
{
x = "無參數X初始化";
y = "無參數Y初始化";
}
public A(string str) : this()
{
x = str;
}
public string GetX()
{
return x;
}
public string GetY()
{
return y;
}
}
Main
static void Main(string[] args)
{
A K = new A();
Console.WriteLine(K.GetX());
Console.WriteLine(K.GetY());
Console.WriteLine("------------------------");
A J = new A("有參數建構式");
Console.WriteLine(J.GetX());
Console.WriteLine(J.GetY());
Console.ReadLine();
}
結果:

因此本身的建構式也可以使用多載方式來初始化。