9.1 C#中类定义
1.抽象类,不能实例化,只能继承,可以有抽象成员;密封类,不能继承。
public abstract class MyClass
{}
public sealed class MyClass
{}
2.类定义中可以使用的修饰符的组合
无或internal-----------------------类只能在当前项目中访问
public-----------------------------类可以在任何地方访问
abstract或internal abstract--------类只能在当前项目中访问,不能实例化,只能继承
public abstract--------------------类可以在任何地方访问,不能实例化,只能继承
sealed或internal sealed------------类只能在当前项目中访问,不能派生,只能实例化
public sealed----------------------类可以在任何地方访问,不能派生,只能实例化
9.2 System.Object
1.GetType()允许根据对象的类型来执行不同的代码,对所有的对象都执行相同的代码。
if (myObj.GetType() == typeof(MyComplexClass))
{}
9.3 构造函数和析构函数
1.构造函数的执行序列
public class MyBaseClass
{
public MyBaseClass () {}
public MyBaseClass (int i){}
}
public class MyderiverClass :MyBaseClass
{
public MyderiverClass () {}
public MyderiverClass (int i) {}
public MyderiverClass (int i,int j) {}
}
实例化MyderiverClass:
MyderiverClass myObj = new MyderiverClass();
事件的顺序:
执行System.Object.Object()构造函数
执行MyBaseClass.MyBaseClass()构造函数
执行MyderiverClass.MyderiverClass()构造函数
MyderiverClass myObj = new MyderiverClass(4);
事件的顺序:
执行System.Object.Object()构造函数
执行MyBaseClass.MyBaseClass(int i)构造函数
执行MyderiverClass.MyderiverClass(int i)构造函数
MyderiverClass myObj = new MyderiverClass(4,8);
事件的顺序:
执行System.Object.Object()构造函数
执行MyBaseClass.MyBaseClass()构造函数
执行MyderiverClass.MyderiverClass(int i,int j)构造函数
2.base关键字指定实例化过程使用基类中匹配指定签名的构造函数。
public class MyderiverClass :MyBaseClass
{
……
public MyderiverClass (int i,int j):base(i) {}
}
MyderiverClass myObj = new MyderiverClass(4,8);
事件的顺序:
执行System.Object.Object()构造函数
执行MyBaseClass.MyBaseClass(int i)构造函数
执行MyderiverClass.MyderiverClass(int i,int j)构造函数
也可以使用base关键字指定基类构造函数的字面值
public class MyderiverClass :MyBaseClass
{
public MyderiverClass ():base(5) {}
……
}
事件的顺序:
执行System.Object.Object()构造函数
执行MyBaseClass.MyBaseClass(int i)构造函数
执行MyderiverClass.MyderiverClass()构造函数
3.this关键字指定在调用指定的构造函数前,.NET实例化过程对当前类使用非默认的构造函数。
9.4 vs2005中的OOP工具
9.5 类库项目
9.6 接口和抽象类
相似之处:抽象类和接口都包含可以由派生类基础的成员。接口和抽象类都不能直接实例化,但可以声明它们的变量。
区别:派生类只能继承一个基类,即只能直接继承一个抽象类。类可以使用任意多个接口。
抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)和非抽象成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)。
接口成员必须在使用接口的类上实现---它们没有代码体。
接口成员是公共的,但抽象类的成员可以是私有的、受保护的、内部的或受保护的内部成员。
此外,接口不能包含字段、构造函数、析构函数、静态成员或常量。
9.7 结构类型
1.浅度复制和深度复制
详见第11章。
浙公网安备 33010602011771号