你的位置:首页 > 软件开发 > ASP.net > 不要在对抽象类接口abstract virtual什么的混淆不清了

不要在对抽象类接口abstract virtual什么的混淆不清了

发布时间:2015-04-15 12:00:45
(最近带一个新手入门 讲这边老费力了。)接口和抽象类不过都是类的抽象罢了,这是他们的本质,只不过人们的思维角度不同而已,一个偏向为行为契约上的抽象(接口) 一个更像大自然中的繁衍关系(抽象类)。直接上代码:class 抽象类 { public static void Ma ...

(最近带一个新手入门 讲这边老费力了。)

接口和抽象类不过都是类的抽象罢了,这是他们的本质,只不过人们的思维角度不同而已,一个偏向为行为契约上的抽象(接口) 一个更像大自然中的繁衍关系(抽象类)。

直接上代码:

class 抽象类  {    public static void Main(get='_blank'>string[] args)    {      ChinesePerson c = new ChinesePerson("xx", 23);      c.Run();      c.Speak();      Console.WriteLine(c.Name);      Console.WriteLine(c.Age);      Console.WriteLine(c.Hobby);      Console.WriteLine("--------");      c.fight();      JiangSuPerson j = new JiangSuPerson();      j.Name = "xiaomao";      j.Age = 24;      j.Run();      j.Speak();      j.fight();      j.sing();      Console.WriteLine(j.Name);      Console.WriteLine(j.Age);      Console.WriteLine(j.Hobby);      Console.WriteLine("----------");      HenanPerson h = new HenanPerson();      h.Name = "linyi";      h.Speak();      h.fight();      h.sing();      Console.ReadKey();    }  }  public interface IRun  {    void Run();  } public abstract class Person : IRun  {    private string name;    private int age;    public string Name    {      get { return name; }      set { name = value; }    }    public int Age    {      get { return age; }      set { age = value; }    }    public abstract string Hobby { get; set; }    public Person(string name, int age)    {      this.Name = name;      this.Age = age;    }    public Person()    { }    public abstract void Speak();    public void Run()    {      Console.WriteLine("Running ~~");    }    //能够被子类重写的 只有 abstract 或virtual修饰的,    //不同在于,abstract一定要被重写,而virtual则是可以被重写 但不一定非要重写,还有就是virtual要有方法体。    public virtual void fight()    {      Console.WriteLine("fighting");    }  }  public class ChinesePerson : Person  {    public ChinesePerson(string name, int age)      : base(name, age)    {      this.Name = name;      this.Age = age;    }    public ChinesePerson()    {    }    public override void Speak()    {      Console.WriteLine("中国人说中文");    }    public override string Hobby    {      get      {        return "shopping";      }      set      {      }    }    public override void fight()    {      base.fight();      Console.WriteLine("chinese gongfu fighting");    }    public virtual void sing()    {      Console.WriteLine("用中文唱歌");    }  } //继承自中国人,但是没有任何重写  public class JiangSuPerson : ChinesePerson  {  }  public class HenanPerson : ChinesePerson  {    public override void Speak()    {      Console.WriteLine("河南人说河南方言");    }    public override void sing()    {      Console.WriteLine("用河南话唱歌");    }  }

原标题:不要在对抽象类接口abstract virtual什么的混淆不清了

关键词:接口

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。