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