今天坐班车的时候,突然就想起来这俩个货了;仔细缕缕,居然越缕越乱较:
上代码吧:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }