回顾Abstract和Virtual的用法

今天坐班车的时候,突然就想起来这俩个货了;仔细缕缕,居然越缕越乱较:

上代码吧:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace VirtualAndAbstract
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13            #region MyRegion
14             //people是 爹:子要在爹的灵魂(抽象)庇佑保护下生存;子在功夫上比爹更高一筹
15             student stu = new student();//student是子
16             People p = stu;
17             p.study();//这是儿子继承爹的心法;
18             Console.WriteLine(stu.get());//这里是儿子直接拿着老子的兵器,斩杀天下负心汉
19             Console.ReadKey(); 
20             #endregion   
21       
22         }
23 
24             #region abstract大法好
25         public abstract class People
26         {
27             public abstract void study();
28             public abstract int Add();
29             public virtual string VirtualMethod()
30             {
31                 return "我是abstract下的virtual方法,我必须要有主体";
32             }
33             //在abstract下,非abstract的方法要有方法体:get()和VirtualMethod()
34             public string get()
35             {
36                 return "Prozkb";
37             }
38         }
39         public class student : People
40         {
41             //爹留下的心法(抽象方法),子要把它全部(老子的家当不能丢)实物化(重载)下来,子也可以对爹的心法进行改良
42             //
43             //爹留下的兵器(非抽象方法),子可以直接拿过来杀敌
44             public override void study()
45             {
46                 Console.WriteLine("hhxx");
47             }
48 
49             public override int Add()
50             {
51                 throw new NotImplementedException();
52             }
53         
54         }
55         #endregion
56      }
57 }
View Code
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 namespace VirtualAndAbstract
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13          #region MyRegion
14             FatherClass father = new FatherClass();
15             SonClass son = new SonClass();
16             FatherClass baba = new SonClass();
17             father.GetAge();
18             
19             Console.WriteLine(son.GetName());
20             son.GetAge();
21           
22 
23             Console.ReadKey(); 
24             #endregion
25         }
26         #region virtual 
27         public class FatherClass
28         {
29             public virtual string GetName()
30             {
31                 return "方法体";
32             }
33             public virtual string SETName()
34             {
35                 return "SET方法体";
36             }
37 
38             public void GetAge()
39             {
40                 Console.WriteLine("年方二八");
41             }
42 
43         }
44         public class SonClass : FatherClass
45         {
46             //儿子不需要把得的所有虚方法重载;这一点还是比abstract那个爹类有好多了
47             //
48             public override string GetName()
49             {
50                 return base.GetName();//这里的base相当于爹(FatherClass)
51             }
52             #region 儿子重写方法,不能改变老子的参数;不然会走火入魔
53 
54             //public override string GetName(string name)
55             //{
56             //    return "我把老子的心法改良了,我就是"+name;
57             //} 
58             #endregion
59 
60 
61             public static string SonGDCQ()
62             {
63                 return "我是儿子自创的乾坤大法:干倒苍穹;俺爹不能用我";
64             }
65 
66             //错误:“VirtualAndAbstract.Program.SonClass.GetStr()”是抽象的,但它包含在非抽象类“VirtualAndAbstract.Program.SonClass”中
67             //所以,抽象方法要放在抽象类中
68            // public abstract string GetStr();
69            
70         } 
71         #endregion
72      }
73 }
View Code

猜你喜欢

转载自www.cnblogs.com/ZkbFighting/p/8968520.html