虚方法和隐藏方法从本质上来说,他们的目的是一样的,都是为了让对象在保证具有基类的共性的同时能够发挥出自己的个性,但不同的是,他们俩的作用范围不一样。隐藏方法的作用范围局限于指向派生类的派生类的引用,而虚方法既可以作用于指向派生类的基类的引用,也可以作用于指向派生类的派生类的引用。当然了,隐藏方法只是将原来的方法隐藏,而虚方法则是直接重写基类的方法,这一点也是有所区别的。下面直接看例子:在我的基类pet中声明了方法xianshi()和虚方法speak()。

public class pet
    {
        public string name="wuhao";
#if true
        public void xianshi()  
        {
            Console.WriteLine("pet's name is:"+name);
        }
#endif
        virtual public void speak()
        {
            Console.WriteLine("pet is shouting!" );
        }
    }
    public class dog : pet
    {
        
        public uint age;
        new public string name = "xiaozhuang";
        public dog(string Name)
        {
            name = Name;
        }
#if true
        new public void xianshi()  
        {
            Console.WriteLine("Dog's name is:"+name);
        }
#endif
        public override void speak()
        {
            Console.WriteLine(name+" is shouting!");
        }
        public void shout() { Console.WriteLine("指向派生类的基类的引用"); }
    }
    public class cat : pet
    {
        public uint age;
        new public string name = "xiaozhuang";
        public cat(string Name)
        {
            name = Name;
        }
#if true
        public new void xianshi()  
        {
            Console.WriteLine("Cat's name is:"+name);
        }
#endif
        public override void speak()
        {
            Console.WriteLine(name+" is shouting!");
        }
    }

在我的派生类dog和cat中也有隐藏方法和虚方法的重写。在主函数中通过不同的使用方式我们来看看结果的异同。

 static void Main(string[] args)
        {
#if false
            dog gou = new dog(null);
            cat mao = new cat(null);
#endif
#if true
            dog gou = new dog("xiaozhuang");
            pet mao = new cat("xiaozhuang");
            gou.xianshi();
            gou.speak();
            mao.xianshi();
            mao.speak();
            
#endif

}

虚方法与隐藏方法异同之我见

首先看看隐藏方法,可以看出,指向派生类的派生类的引用gou成功的使用了派生类中的xianshi()方法,而指向派生类的基类的引用mao使用的则是基类中的xianshi()方法。

再说说虚方法,可以看出,不论是指向派生类的派生类的引用gou还是指向派生类的基类的引用mao,都成功的重写了基类中的speak()方法。

综上可以分析出来,虚方法与隐藏方法的作用域确实不同。

 

相关文章:

  • 2022-12-23
  • 2021-08-02
  • 2021-08-05
  • 2022-12-23
  • 2022-12-23
  • 2022-02-06
  • 2021-11-20
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-10-01
  • 2022-12-23
  • 2021-11-15
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案