继承反映了类与类之间的关系,一个类最多只允许从一个其他的类派生,不允许从两个或者更多的类派生,System.Object类是所有类的根;
class liyy:System.Object (:System.Object可以不写,但实际就是这么回事)
{
public liyy(string name)
{
…… //基类的构造函数
}
…… //基类
}
class lyy:liyy
{
public lyy(string name): base(name)
{
……
}
…… //派生类
}
只有在没有写任何非默认构造器的前提下,编译器才会自己生成一个默认的构造器;
派生类继承基类的字段、方法,创建一个对象时,这些字段通常需要初始化,通常在一个构造器中执行这种初始化,所有的类都至少有一个构造器(如果你没有提供一个,编译器会自动生成一个默认的构造器),作为一个良好的编程习惯,派生类的构造器在执行初始化时,最好调用一下它的基类的构造器,为派生类定义构造器时,可以使用base关键字来指定调用一个基类的构造器;
假如不在派生类构造器中显式调用一个基类的构造器,编译器会自动插入对基类的默认构造器的一个调用,然后才会执行派生类构造器中的代码;
可以将派生类的对象赋值给基类的对象,反之则不成立;
基类的对象引用了一个派生类的对象后,只能访问基类定义的方法和字段;
派生类中的方法会屏蔽基类中具有相同签名的方法;
如果基类和派生类中具有相同签名的方法的话,编译器会发出一个警告,可以在派生类的相同签名的前面加上new关键字来消除警告,但屏蔽仍然发生;
如果基类中将一个方法声明为virtual方法,那么在派生类中可以使用override来重写这个方法;
public: 对任何类和成员都公开;
protected: 对该类以及该类的派生类公开;
private: 仅对该类公开;
internal: 包含该类的程序集中访问该类(只是单独的项目,而不是整个解决方案);
protected internal: 只能在本类,派生类或者包含该类的程序集中访问
System.Int32类型实际是一个结构,而不是一个类,而结构是不能继承的;