浅谈 虚方法(virtual)

虚方法     
   
  理解:从字面意思来讲,“虚”,可有可无,子类对父类的某种方法的重写,可以重写,也可以不重写。     
虚方法,顾名思义(装个13),就是某种方法。
  用法:public virtual void TestMethod(){}
     必须为public,因为虚拟成员不能是私有的。
-------------------------------------------------------------------------
  体现:虚方法是多态特性的一种体现。
-------------------------------------------------------------------------
实例运用:多个儿子继承一个父亲,但是他们有共同于父亲的东西,例如血型,他们都是一样的吧。
但是,他们的个性啊,身材啊,都有所差别了。这时候,应该是调用父亲的血缘,拥有共同的血缘。


  

 1   class DjwFather
 2     {
 3         public virtual void Method()
 4         {
 5             Console.WriteLine("我是A型号血");
 6         }
 7     }
 8 
 9     class TestSon: DjwFather
10     {
11         public override void Method()
12         {
13             base.Method(); // 这边可以注释,可以不注释;还可以把这个移动到最下面看看运行结果
14             Console.WriteLine("我是儿子");
15         }
16     }
17 
18     class TestDauter : DjwFather
19     {
20         public override void Method()  //这个跟上面一个操作
21         {
22             base.Method();
23             Console.WriteLine("我是女儿");
24         }
25     }
26 
27  class Program
28     {
29         static void Main(string[] args)
30         {
31             TestSon tone = new TestSon(); //实例化
32             tone.Method(); //调儿子
33             TestDauter ttwo = new TestDauter(); //可以把这个注释对比上面。
34             ttwo.Method();
35 
36             Console.ReadKey(); // 可以运行结果定住不动。
37         }
38     }


注:Base关键字在这里的作用是,只要写上base.Method() 这个base代表父类,即代表的是调用父类的该方法。base,以及override,可以写也可以不写。(跟抽象类中抽象方法不同)

学习方法:如果你不清楚virtual怎么用,就把上面的代码粘贴复制,反复把注释的代码,不注释,自己查看运行结果,这样更加可以理解virtual怎么用,以及override怎么用。
还有就是把base.Method()移到子类Method内部方法的最下面。
个人认为,这是最好的让你明白的方法,跟你讲再多,不如自己实际敲一遍,运行一下。
推荐初学,先粘贴复制,删掉注释重新运行查看运行结果,尤其注意加base,不加base的结果。

  

原文地址:https://www.cnblogs.com/u3ddjw/p/6676485.html