源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#基础继承和多态详解

  • 时间:2020-06-17 20:30 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#基础继承和多态详解
继承   在现有类(称为基类、父类)上建立新类(称为派生类、子类)的处理过程为继承。派生类能自动获取基类(除了构造函数和析构函数外的所有成员),可以在派生类中添加新的属性和方法扩展其功能。
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.Linq; using System.Web; public class Person {     private string _id;     public string id     {         get { return _id; }         set { _id = value; }     }     /// <summary>     /// 构造函数     /// </summary>     /// <param name="id"></param>     public Person(string id)     {         _id = id;     }     /// <summary>     /// 无参构造函数     /// </summary>     /// <param name="id"></param>     /// <param name="Class"></param>     public Person()     {     }     public string GetID()     {         return id;     } } //<访问修饰符>class 派生类名:基类名 public class Student : Person {     private string _Class;     public string Class     {         get { return _Class; }         set { _Class = value; }     }     /// <summary>     /// 无参构造函数     /// </summary>     /// <param name="id"></param>     /// <param name="Class"></param>     public Student()     {     }     public string GetClass()     {         return Class;     } } public class NewStudent:Student {     /// <summary>     /// 无参构造函数     /// </summary>     /// <param name="id"></param>     /// <param name="Class"></param>     public NewStudent()     {     }     private string _NID;     public string NID;     public string GetNID()     {         return NID;     } }
[u]复制代码[/u] 代码如下:
    protected void Page_Load(object sender, EventArgs e)     {         Person p = new Person("ID1111111");         Student s = new Student();         NewStudent n = new NewStudent();         s.id = "ID2222222";         s.Class = "12班";         n.NID = "NID3333333";         n.id = "ID3333333";         n.Class = "13班";         Label1.Text = p.GetID();         Label2.Text = s.GetID()+s.GetClass();         Label3.Text = n.GetID() + s.GetClass() + n.GetNID();         //输出结果 ID1111111111 ID222222212班 ID333333312班NID3333333     }
  从上面的例子可以看出,继承的可传递性,如果C从B中派生,B又从A派生。那么C不仅继承了B中的成员,同样也继承了A中的成员。继承的单一性指派生类只能从一个基类中继承,不能同时继承多个基类。派生类只能访问基类中public,protected,internal修饰的成员    base关键字用于在派生类调用基类的构造函数、属性和方法。
[u]复制代码[/u] 代码如下:
    public Student(string id):base(id) //调用基类的构造函数     {     }
 多态的实现(virtual override abstract的使用)   在C#的学习中,容易混淆virtual方法和abstract方法的使用,现在来讨论一下二者的区别。二者都牵涉到在派生类中与override的配合使用。 1、Virtual方法(虚方法)      virtual 关键字用于在基类中修饰方法。virtual的使用会有两种情况:      情况1:在基类中定义了virtual方法,但在派生类中没有重写该虚方法。那么在对派生类实例的调用中,该虚方法使用的是基类定义的方法。      情况2:在基类中定义了virtual方法,然后在派生类中使用override重写该方法。那么在对派生类实例的调用中,该虚方法使用的是派生重写的方法。 2、Abstract方法(抽象方法)      abstract关键字只能用在抽象类中修饰方法,并且没有具体的实现。抽象方法的实现必须在派生类中使用override关键字来实现。
[u]复制代码[/u] 代码如下:
public abstract class Person {     private string _id;     public string id     {         get { return _id; }         set { _id = value; }     }     /// <summary>     /// 构造函数     /// </summary>     /// <param name="id"></param>     public Person(string id)     {         _id = id;     }     /// <summary>     /// 无参构造函数     /// </summary>     /// <param name="id"></param>     /// <param name="Class"></param>     public Person()     {     }     public virtual string GetID()     {         return "虚方法可覆盖";     }     public virtual string GetID1()     {         return "虚方法可覆盖";     }     public string GetID2()     {         return "一般的方法,在派生类重写,需要用new";     }     public abstract string GetID3(); //抽象方法,不含主体 派生类必须继承此方法 } //<访问修饰符>class 派生类名:基类名 public class Student : Person {     private string _Class;     public string Class     {         get { return _Class; }         set { _Class = value; }     }     public Student()     {     }     public Student(string id):base(id) //调用基类的构造函数     {     }     public override string GetID()     {         return "虚方法可覆盖-用override";     }     public new string GetID2()     {         return "普通方法可覆盖-用new";     }     public override string GetID3()     {         return "抽象方法必须实现-用override";     } }
[u]复制代码[/u] 代码如下:
    protected void Page_Load(object sender, EventArgs e)     {         var a = new Student();         Label1.Text = a.GetID() ;         Label2.Text = a.GetID1();         Label3.Text = a.GetID2();         Label4.Text = a.GetID3();         //运行结果         //虚方法可覆盖-用override 虚方法可覆盖 普通方法可覆盖-用new 抽象方法必须实现-用override     }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部