都知道,继承机制可以提高代码的可复用性和可扩展性,提高软件效率。多态是由于基类的引用调用在派生类中实现的方法,不同的派生类将产生不同的调用结果。
在C#的规则中,继承机制很强大,可以从一个类或多个接口中继承,也可以传递继承,但不能从多个类中继承。子类可以共用父类的所有非私有成员。注意1.:构造函数和析构函数是不能被继承的。除此以外的成员都可以被继承。2.密封类sealed不是被继承
而多态性质中,继承机制是实现多态的基础。C#中每种类型都是多态的,因为任何类型都从Object类型派生。多态性分为两种,一种是编译时的多态性,表现为在同一个类中的方法的重载(方法的参数信息不同)。第二个是运行时的多态性,表现形式为虚方法的覆写,是真正的利用到继承机制。在基类中设置一个虚方法,留给基类的派生类去覆写它。虚方法就是可以在派生类中对其实现进一步改进的方法。注意:静态成员函数,构造函数不能是虚方法。
以上都是我对继承机制概念的掌握,但所掌握的知识中思考越多,头脑中的疑点也越多,我便提出我的疑点和我思考后得出的结论吧。
疑点一:当派生类类被调用构造函数时,基类与派生类的初始化执行顺序是怎样?
答: 1.初始化类的实例字段
2.调用基类的构造函数
3.调用类自己的构造函数
eg void main()
{
Student student=new Student();
}
class Person
{
string Name;
int Age;
public Person (string name,int age) //重载函数
{
Name=name;
Age =age ;
Console.WriteLine("{0},{1}",Name,Age );
}
}
class Student:Person
{
string School;
public Student(string name, int age, string school)
:base(name,age) //在派生类中指定基类构造函数,根据参数信息调用基类的构造函数,去掉为默认的无参数构造函数
{
//还可以使用this来构造函数,其格式为:this(),其先根据参数调用当前类的构造函数的基类构造函数,后调用该构造函数,最后调用this自己的构造函数
School = school;
Console.WriteLine("{0},{1},{2},{3}",this.Name ,base .Name , Age ,School);
}
}
疑点二:用new隐藏基类成员与虚方法的覆写的区别
在我没有真正理解隐藏和覆写这两个概念时,我一直在怀疑虚方法的用处何在,既然虚方法覆写的目的是为了在派生类中进一步改变基类的方法,我用new改进我要修改的值不是也可以?当然可以,但隐藏毕竟是隐藏,并没有实质性的改写,因此我在Person person=new student时,得出的person.name是基类的值,而不是派生类的值,并不是的到我们想要的值 。而通过虚方法覆写,是真正的修改了基类方法的值,在运行时已经修改,因此两者是有本质上的区别。两种方法的对象也不尽相同,new 可以针对的是基类的各个可继承的成员,包括方法。而虚方法只是针对的是基类的可继承某个方法。没错,他们的相同点都是必须以继承为基础