介面和繼承
繼承(Inheritance)
類別可宣告成三種型式
- static - 無法被實例化,應用程式Run起來,就會存在
- static class MyClass { }
- abstract - 無法被實例化,是一個未完成的class
- abstract class MyClass { }
- sealed - 無法被繼承的類別
- sealed class MyClass { }
繼承階層範例
|
根據此階層關係MyClass3會有三個屬性
- Name
- Age
- Address
虛擬方法(Virtual Methods)
說明:一個已經有實作方法,而且可以被衍生類別覆寫(override)
Demo - 了解 virtual, override and new
說明:Demo有四個類別,其中一個是BaseClass,另外三個類別會繼承BaseClass,並寫用不同的方式,重寫BaseClass.Hello()的方法。
class BaseClass
{
public virtual void Hello()
{
Console.WriteLine("BaseClass Say Hello");
}
}
class DerivedOverrideClass : BaseClass
{
// 使用 override 語句
public override void Hello()
{
Console.WriteLine("DerivedOverrideClass Say Hello");
}
}
class DerivedNewClass : BaseClass
{
// 使用 new 語句
public new void Hello()
{
Console.WriteLine("DerivedNewClass Say Hello");
}
}
class DerivedOverwrite : BaseClass
{
// 與BaseClass 同名
public void Hello()
{
Console.WriteLine("DerivedOverwrite Say Hello");
}
}
static void Main(string[] args)
{
var baseClass = new BaseClass();
var derivedOverride = new DerivedOverrideClass();
var derivedNew = new DerivedNewClass();
var derivedOverWrite = new DerivedOverwrite();
baseClass.Hello(); // output : BaseClass Say Hello
derivedOverride.Hello(); // output : DerivedOverrideClass Say Hello
derivedNew.Hello(); // output : DerivedNewClass Say Hello
derivedOverWrite.Hello(); // output : DerivedOverwrite Say Hello
// 將衍生類別轉型回BaseClass的結果
((BaseClass)derivedOverride).Hello(); // output : DerivedOverrideClass Say Hello
((BaseClass)derivedNew).Hello(); // output : BaseClass Say Hello
((BaseClass)derivedOverWrite).Hello(); // output : BaseClass Say Hello
}
從結論來看只有override,還會保留衍生類別的方法,而其他兩種衍生類別的方法都會消失,執行BaseClass的方法。
物件實體化
當一個類別被new起來的時候,建構式會被執行,而父類別建構式,會先執行,以下範例
|
|
介面(interface)
介面裡面會有定義的方法,類別需要實作介面定義的方法,而一個類別可實作多個介面。
public class Computer : IDateOperater, ISerialization
{
public void Save()
{
throw new NotImplementedException();
}
public void Serialized()
{
throw new NotImplementedException();
}
}
public interface IDateOperater
{
public void Save();
}
public interface ISerialization
{
public void Serialized();
}
以上為有關繼承的基本介紹。
一天一分享,身體好健康。
該追究的不是過去的原因,而是現在的目的。