《C#高级编程第6版》学习笔记(1)-----继承
1.概念:
多重继承:C#不支持多重继承,但是允许派生于一个类或多个接口。
结构和类:结构总是派生于System.ValueType,它还可以派生于多个接口。类可以派生于一个类或多个接口。
2.实现继承:
a.声明一个类派生于另一个类:
class DerivedClass:BaseClass{
//这里定义函数和数据成员
}
b.如果类派生于接口和类,则用逗号分开类和接口。
class DerivedClass:BaseClass,IInterface1,IInterface2{
//同上
}
c.对于结构,则如下:
class DerivedStruct:IInterface1,IInterface2{
//同上
}
d.如果在类中没有指定基类,C#编译器就假定System.Object为基类。
class MyClass:Object{
//同上
}
和
class MyClass:object{
//同上
}
、
class MyClass{
//同上
}
是一样的。
2.1 虚方法
在一个基类函数前加virtual,该函数就可以在派生类中重写了。
class BaseClass{
public virtual string VirtualMethod{
return "This is a virtual method";
}
}
在派生类中要重写此虚函数,在函数前加override,成员字段和静态函数不能申明为virtual。
2.2隐藏方法
如果签名的方法在基类和派生类都进行了申明,并没在基类前加virtual和没在派生类前加override,则在派生类中隐藏了基类中的方法。
class HidBaseClass{
public int HidMethod{
return 0;
}
}
class HidClass:HidBaseClass{
public new int HidMethod{
return 0;
}
}
2.3 调用函数的基类版本
使用base.<MethodName>()调用基类的相同方法。
2.4 抽象函数和抽象类
把申明为abstract的函数或类称为抽象函数或类,派生形式同虚拟类。抽象函数不能实例化,必须在费抽象的继承类中重写。
2.5密封类和密封方法
C#允许把类和方法申明为sealed,对于类来说不允许继承于该类;对于方法来说,不允许重写该方法。要在方法或属性上使用sealed,必须先在基类上把它们申明为重写。
2.6 派生类中的构造函数
在派生类的实例化过程中,派生类的构造函数调用-->基类的构造函数-->Object的构造函数,执行时的顺序则反过来。
2.7 修饰符
a.可见式修饰符
b.其它修饰符
2.8接口
不能实例化接口,只能包含其签名;接口不能有构造函数或字段。