C#調用父類(基類)的構造函數

今天練習虛方法與多態,順便想在子類中使用父類的構造函數,沒有寫過類似的用法,也出了Bug,就上網找了資料寫了這篇來當筆記。

首先,我們需要在父類(此範例為father)中自定義一個構造函數,寫法如下:

 public father(string father_name)
{
//此處的Name是我在父類中宣告的一個屬性
Name = father_name;
}

然後,在子類(此範例為child)中自定義一個構造函數,並使用base來繼承father中定義的構造函數:

//自定義構造函數
public child(string child_name) : base(child_name)
{
//此處可以不用寫任何東西,因為base直接調用父類father的構造函數,將子類child構造函數內的child_name,回調給父類Bird構造函數內的father_name
}

實際範例:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Bird
{
private string name;

public string Name
{
set
{
name = value;
}
get
{
return name;
}
}

public Bird(string Bird_name)
{
Name = Bird_name;
}

public virtual void Eat()
{
Debug.Log("這是鳥類 [" + this.Name + "] ,喜歡吃蟲");
}
}

public class Magpie : Bird, IOriginalEat
{
//自定義構造函數
public Magpie(string Magpie_name) : base(Magpie_name)
{
//此處可以不用寫任何東西,因為base直接調用父類Bird的構造函數,將子類Magpie構造函數內的Magpie_name,回調給父類Bird構造函數內的Bird_name
}

public override void Eat()
{
Debug.Log("這是喜鵲 [" + this.Name + "] ,喜歡吃蟲");
}

//實現OriginalEat介面並實作OriginEat方法
public void OriginEat()
{
//使用父類Bird中的Eat方法
base.Eat();
}
}

public class Eagle : Bird
{
//自定義構造函數
public Eagle(string Eagle_name) : base(Eagle_name)
{
//此處可以不用寫任何東西,因為base直接調用父類Bird的構造函數,將子類Eagle構造函數內的Eagle_name,回調給父類Bird構造函數內的Bird_name
}

public override void Eat()
{
Debug.Log("這是老鷹 [" + this.Name + "] ,喜歡吃肉");
}
}

public class Penguin : Bird
{
//自定義構造函數
public Penguin(string Penguin_name) : base(Penguin_name)
{
//此處可以不用寫任何東西,因為base直接調用父類Bird的構造函數,將子類Penguin構造函數內的Penguin_name,回調給父類Bird構造函數內的Bird_name
}

public override void Eat()
{
Debug.Log("這是企鵝 [" + this.Name + "] ,喜歡吃魚");
}
}

public interface IOriginalEat
{
void OriginEat();
}

實際引用:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Polymorphism : MonoBehaviour
{
Bird[] birds = { new Magpie("Mapie001"), new Eagle("Eagle001"), new Penguin("Penguin001"), new Bird("Bird001") };
// Use this for initialization
void Start()
{
Debug.Log(birds[0].Name);
Debug.Log(birds[1].Name);
Debug.Log(birds[2].Name);
Debug.Log(birds[3].Name);

foreach (Bird item in birds)
{
item.Eat();
}

IOriginalEat Mapie002 = new Magpie("Mapie002");

Mapie002.OriginEat();

Magpie Mapie003 = new Magpie("Mapie003");

Mapie003.OriginEat();

}

// Update is called once per frame
void Update()
{

}
}

輸出結果:
base

發表留言