.NET基础 (06)面向对象的实现
面向对象的实现
1 C#中类可以有多个父类、可以实现多个接口吗
2 简述C#中重写、重载和隐藏的概念
3 为什么在构造方法中调用虚方法会导致问题
4 在C#中如何声明一个类不能被继承
面向对象的实现
C#中最多只能有一个父类,但可以实现多个接口。
重写是指用Override关键字重新实现基类中的虚方法,在运行的过程中,无论通过那个类型的引用,真正类型的方法将被调用。
隐藏是指用new关键字重新实现基类中的方法,在运行的过程中通过引用的类型判断应该调用哪个类型的方法。
重载是指多个方法共享同一个名字并且拥有相同的返回值,但是却可以拥有不同的参数列表。
构造方法中调用虚方法将导致运行时的错误。这是因为构造方法被调用时,子类的构造方法还未被调用,但是根据实际对象的类型,基类调用的虚方法是定义在子类中的方法,这就意味着调用了一个未完成构造的类型对象的方法,不可预计的错误将可能发生。
构造方法示例如下:
class Constructor { static void Main(string[] args) { //构造了一个底层类型 C c = new C(); Console.Read(); } } public class Ref { public Ref(string s) { Console.WriteLine(s); } } public class Base { public Ref basestring = new Ref("Base初始化表达式"); public Base() { Console.WriteLine("Base构造方法"); } } public class A:Base { public Ref astring = new Ref("A初始化表达式"); public A():base() { Console.WriteLine("A构造方法"); } } public class B : A { public Ref bstring = new Ref("B初始化表达式"); public B(): base() { Console.WriteLine("B构造方法"); } } public class C : B { public Ref cstring = new Ref("C初始化表达式"); public C(): base() { Console.WriteLine("C构造方法"); } }
输出结果:
C初始化表达式
B初始化表达式
A初始化表达式
Base初始化表达式
Base构造方法
A构造方法
B构造方法
C构造方法
C#通过关键字sealed可以申明一个类型不可被继承,设计中应该为所有不被作为基类的类型添加sealed关键字,以避免各种来自继承的易产生的错误。
String类就是sealed的
转载请注明出处: