星期三, 7月 23, 2014

[C#] abstract 和 virtual 函數的差異

MVA Twenty C# Questions Explained - [09 ​What is the difference between abstract and virtual functions?]

整理影片中說明重點
  • abstract method 不會有程式內容
namespace MVATwentyQuestions
{
    abstract class absClass
    {
        public abstract void DisplayValue(string value)
        {
            // DoSomething
        }
    }
}
[C#] abstract 和 virtual 函數的差異-1


  • abstract method 繼承後,一定要 override
namespace MVATwentyQuestions
{
    class absClassInherited : absClass
    {
        // 故意把 overirde comment 起來並執行
        // override public void DisplayValue(string value)
        // {
        //     Console.WriteLine(value);
        // }
    }
}
[C#] abstract 和 virtual 函數的差異-2

  • virtual method 一定要有程式內容
namespace MVATwentyQuestions
{
    class virtClass
    {
        public virtual void DisplayValue(string value);
        // 故意把程式內容 comment 起來並執行
        // {
        //   Console.WriteLine(value);
        // }
    }
}
[C#] abstract 和 virtual 函數的差異-3

  • 宣告為 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());
        }
    }
}
[C#] abstract 和 virtual 函數的差異-4
  • 設定為 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 函數的差異-5

沒有留言:

張貼留言