此為個人學習筆記,如果有理解錯誤或是相關資訊歡迎留言告知與分享,謝謝!
參考影片: 小山的 C# 教學
什麼是override?
-
覆蓋掉 被繼承的base class 中的方法或屬性
用到的場合?
-
需要base class內的東西,但有些部分與base class的屬性或方法不同
-
常用於多型,讓許多相同的method具有不同的行為(使用場合??)
怎麼寫?
-
方法的名稱與參數要完全相同
-
derived class的方法要加 override
-
base class的方法要加virtual
=================================================================
e.g.,
原本使用繼承的程式碼
//base class
class People
{
public string Say()
{
return "People類別內的Say";
}
}
//derived class
class Program : People
{
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine("這是哪裡的say()?\n"+ p.Say());
Console.ReadKey();
}
}
印出結果
這是哪裡的say()?
People類別內的Say
=================================================================
繼承並寫ovrride的程式碼
//base class
class People
{
public virtual string Say()
{
return "People類別內的Say";
}
}
//derived class
class Program : People
{
public override string Say()
{
return "Program內override的Say";
}
static void Main(string[] args)
{
Program p = new Program();
Console.WriteLine("這是哪裡的say()?\n"+ p.Say());
Console.ReadKey();
}
}
印出結果
這是哪裡的say()?
Program內override的Say
=================================================================
為什麼不要再多寫個method就好,要用override呢?
//base class
//和 "繼承並寫ovrride的程式碼 "的base class相同,懶得再複製貼上
//derived class
class Program : People
{
public override string Say()
{
return "Program內override的Say";
}
public string Say1()
{
return "Program的Say1";
}
static void Main(string[] args)
{
Program p = new Program();
People a = p;
//_____為空白.以下討論
Console.WriteLine("這是哪裡的say()?\n"+ _____ );
}
}
-
_____ = p.Say1();
印出結果
這是哪裡的say()?
Program的say1
-
_____ = a.Say1();
會出現紅底線
因為Say1()是Program內的方法,
所以若用 People 宣告 a時,沒有這個方法
但若用override則不會出現此問題。
之後需補充
abstract 抽象類別......
override 屬性也可用
this / base (ex: this.Say())