OOP C# 第二天筆記

  • 598
  • 0
  • C#
  • 2018-12-16

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();
}

 

結果:

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