C# 虛方法


問題:在父類中單獨的一個方法,調用父類的一個虛方法(該方法是被子類重寫的),那么執行的這個虛方法是掉父類的方法呢還是子類的方法呢?

class Father
    {
        public string name = "我是父親";

        public virtual string GetName()
        {
            return this.name;
        }

        public void SetFather()
        {
            var _name = this.GetName();//如果實例對象是子類的話,這里調的是子類的重寫方法;如果實例對象是父類的話,調的當然是父類的方法
            Console.WriteLine("通過GetName方法獲取的值:" + _name);
            Console.WriteLine("Father的name是:" + name);
        }
    }

  class Son : Father
    {
        public string son_name = "我是兒子";
        public override string GetName()
        {
            this.son_name = "兒子變成豬";
            this.name = "父親的名字改變了哦";
            return this.son_name;
        }
    }

調用:

 /*
             * 這里主要是測試 在父類中單獨的一個方法,調用父類的一個虛方法(該方法是被子類重寫的),那么執行的這個虛方法是掉
             * 父類的還是子類的呢?
             * 實驗證明:調的是子類的被重寫的方法。
             */
            Console.WriteLine("實例化son對象");
            Father f = new Son();
            f.SetFather();

            Console.WriteLine("========================我是華麗的分割線========================");

            Console.WriteLine("實例化father對象");
            Father f2 = new Father();
            f2.SetFather();

            Console.Read();

 

答案是:如果實例對象是子類的話,這里調的是子類的重寫方法;如果實例對象是父類的話,調的當然是父類的方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM