C#类的继承:子类--父类

来源:互联网 发布:会声会影x8注册机 知乎 编辑:程序博客网 时间:2024/06/04 04:35

为了避免冗余,将几个类中重复的成员单独拿出来封装成一个类,作为这几个类的父类。

父类---子类       基类----派生类

子类没有继承到父类的私有(private)字段,可以继承属性(public)和方法。

1、一个子类只能有一个父类(单根性)

2、可以传递性继承(传递性)

查看类之间的关系可以通过  查看类图选项,  选中解决方案,右键,查看类图。


子类没有继承父类的构造函数

子类会默认调用父类的无参数构造函数,因为要创建父类对象,让子类可以使用父类中的成员。如果在父类中重新写了一个有参数的构造函数,无参数的构造函数被覆盖,子类就无法调用无参数的构造函数,子类报错。

解决方法:

1、在父类中重新写一个无参数的构造函数;

2、在子类中显示的调用父类的有参数的构造函数,使用关键字base( );  // 一般使用此方法

子类中的方法名和父类中的方法名相同时,子类将父类的方法自动隐藏。在方法名前面加上关键字new,彻底将从父类继承的方法隐藏。

子类可以直接调用父类的方法。


public class Person    {        string _name;        public string Name        {            get{return  _name;}            set{_name=value;}        }        public Person(string name)        {            this.Name=name;        }        }public class student:Person{    public  strudent(string  name, int gender,int age,int id)         :base(name,gender,age){    this.Id=id;}}public class teacher:Person{}


在项目中不应该把类都放在一个项目中。

   //  正确显示的格式         int _age;        public int Age        {            get { return _age; }            set { _age = value; }        }        student(string name,int ag)            : base(name)        {            _age = Age;        }

假设父类子类都含有方法  public void  print(){   }

若在子类中将此方法隐藏,则为 public new  void print() {    }

再次总结new的作用:

1、创建对象;

2、隐藏父类那里继承过来的同名成员,使子类调用不到父类的成员。

如果一个类没有继承其他类,默认继承object类;其实:在C#中所有的类都直接或间接的继承object类

调用(父类与子类)

子类对象可以调用父类对象的成员,但是父类对象不可以调用子类的成员,只能调用自身的成员。

1、子类可以赋值给父类:应用  如果有一个地方需要一个父类做参数,我们可以用一个子类代替。

Person  per=new student(); 或者写成Student  str=new  student ( );Person s=str; 

2、如果父类中装的是子类对象,那么可以将父类强制转换为子类对象;

如 上面的例子,满足Person s=str;   则 强制转换 : student   ss = (student) s;

由于teacher是person的子类,但是不可以teacher tt=(teacher)s;  因为父类中装的是子类student中的对象。

需要进行判断一下,使用is  或者  as

if(s is teacher){  // 成功返回TRUE,失败返回FALSETeacher tt=(Teacher)s;}else {  }或者使用asTeacher  t= s as Teacher;  //  成功返回正确结果,错误返回NULL

父类与子类举例:

namespace convert{    class Program    {        static void Main(string[] args)        {            Person[] people = new Person[10];  // 存在了父类数组中            Random num = new Random();            for (int i = 0; i < 10; i++)            {                int rand = num.Next(1, 6);  // 产生随机数,注意这里是产生1-6之间的随机数,不包括6,  只产生0 、1、2、3、4、5                switch (rand)                {                    case 1:                        people[i] = new Vivi(); // 子类可以赋值给父类                        break;                    case 2:                        people[i] = new Ququ();                        break;                    case 3:                        people[i] = new Evil();                        break;                    case 4:                        people[i] = new Wea();                        break;                    case 5:                        people[i] = new Ewi();                        break;                    default:                        people[i] = new Person();                        break;                }            }            for (int i = 0; i < 10; i++)            {                if (people[i] is Vivi)                {                    ((Vivi)people[i]).showvivi();  //  父类可以转换为子类(前提是父类装的是子类)                }                else if (people[i] is Ququ)                {                    ((Ququ)people[i]).showququ();                }                else if (people[i] is Evil)                {                    ((Evil)people[i]).showevil();                }                else if (people[i] is Wea)                {                    ((Wea)people[i]).showwea();                }                else if (people[i] is Ewi)                {                    ((Ewi)people[i]).showpeewi();                }            }            Console.ReadKey();        }        // 父类与子类的关系  5个子类        public class Person        {            public void showpeson()            {                Console.WriteLine("hello,i'm person");            }        }        public class Vivi : Person        {            public void showvivi()            {                Console.WriteLine("hello,i'm vivi");            }        }        public class Ququ : Person        {            public void showququ()            {                Console.WriteLine("hello,i'm Ququ");            }        }        public class Evil : Person        {            public void showevil()            {                Console.WriteLine("hello,i'm Evil");            }        }        public class Wea : Person        {            public void showwea()            {                Console.WriteLine("hello,i'm Wea");            }        }        public class Ewi : Person        {            public void showpeewi()            {                Console.WriteLine("hello,i'm ewi");            }        }    }}


原创粉丝点击