整理影片中說明重點
- abstract method 不會有程式內容
namespace MVATwentyQuestions
{
abstract class absClass
{
public abstract void DisplayValue(string value)
{
// DoSomething
}
}
}
- abstract method 繼承後,一定要 override
namespace MVATwentyQuestions
{
class absClassInherited : absClass
{
// 故意把 overirde comment 起來並執行
// override public void DisplayValue(string value)
// {
// Console.WriteLine(value);
// }
}
}
- virtual method 一定要有程式內容
namespace MVATwentyQuestions
{
class virtClass
{
public virtual void DisplayValue(string value);
// 故意把程式內容 comment 起來並執行
// {
// Console.WriteLine(value);
// }
}
}
- 宣告為 virtual 的 method,繼承後才可以進行 override
namespace MVATwentyQuestions
{
class virtClass
{
// 故意把 virtual 拿掉
public void DisplayValue(string value)
{
Console.WriteLine(value);
}
}
class virtClassInherited : virtClass
{
public override void DisplayValue(string value)
{
Console.WriteLine(value.ToUpper());
}
}
}
- 設定為 virtual 的 method,沒有一定要 override
namespace MVATwentyQuestions
{
class virtClass
{
public virtual void DisplayValue(string value)
{
Console.WriteLine(value);
}
}
class virtClassInherited : virtClass
{
// public override void DisplayValue(string value)
// {
// Console.WriteLine(value.ToUpper());
// }
}
}
![[C#] abstract 和 virtual 函數的差異-1](https://farm4.staticflickr.com/3914/14439557667_5d9d1b7f63_z.jpg)
![[C#] abstract 和 virtual 函數的差異-2](https://farm6.staticflickr.com/5485/14625468612_17fed47c86_z.jpg)
![[C#] abstract 和 virtual 函數的差異-3](https://farm3.staticflickr.com/2907/14623964494_22f40a33fe_z.jpg)
![[C#] abstract 和 virtual 函數的差異-4](https://farm3.staticflickr.com/2921/14439416010_76373b6364_z.jpg)
![[C#] abstract 和 virtual 函數的差異-5](https://farm4.staticflickr.com/3883/14625587252_628abe11ba_z.jpg)
沒有留言:
張貼留言