吴佳鑫的个人专栏

当日事当日毕,没有任何借口

导航

类与接口

可以指定类是抽象的abstract(不能实例化,只能继承,可以有抽象成员)或密封的sealed(不能继承)

抽象类声明:
public abstract class MyClass{}
密封类声明:
pulbic sealed class MyClass{}
继承和接口:(类名后面加冒号,其后是基类名或接口)
public class MyClass:MyBase{} //继承
public class MyClass:IMyInterface{} //接口
public class MyClass:MyBase,IMyInterface{}  //先指定基类,然后才是接口
注意:
1.C#中,只能有一个基类,如果继承了一个抽象类,就必须实现所继承的所有抽象成员(除非派生类也是抽象的

)
2.所有的接口成员都必须在支持该接口的类中实现
3。可以把接口成员实现为抽象类中的抽象成员

接口:
interface IMyInterface{}
注意:
1.关键字abstract和sealed不能在接口中使用
2.接口的继承也可以用与类继承的类似方式来指定。主要区别是可以使用多个基接口
public interface IMyInterface:IMyInterface,IMyBaseInterface2{}
3.接口不是类,所以没有继承System.Object


构造函数和析构函数
class MyClass
{
 public MyClass(){}   //默认构造函数
 public MyClass(){int myInt)}  //重载构造函数
 ~MyClass(){}  //析构函数
}
注意:
1.在调用析构函数后,还将隐式地调用基类的析构函数,包括System.Object根类中的Finalize()的调用
2.无论用什么构造函数实例化一个类,总是要先调用System.Object.Object()
3.构造函数初始化器,它把代码放在方法定义的冒号后面。这样可以在派生类的构造函数定义中指定所使用的

基类的构造函数
public class MyDerivedClass:MyBaseClass
{
    ....
    public MyDerivedClass(int i,int j):base(i)
     {
     }
}
base关键字指定.net实例化过程使用基类中有指定参数的构造函数
除了base关键字外,这里还可以使用另一个关键字this作为构造函数初始化器。这个关键字指定在调用指定的

构造函数前,.net实例化过程当前类使用非默认的构造函数。


接口和抽象类
类似:
1.抽象类和接口都包含可以由派生类继承的成员
2.接口和抽象类都不能直接实例化,但可以声明它们的变量。如果这样做,就可以用多态性把继承这两种类型

的对象指定给它们的变量。接着通过这些变量来使用这些类型的成员,但不能直接访问派生对象的其他成员

区别:
1.派生类只能继承一个基类,即只能直接继承一个抽象类
2.相反,类可以使用任意多个接口
3.抽象类可以拥有抽象成员(没有代码体,且必须在派生类中实现,否则派生类本身必须也是抽象的)和非抽象

成员(它们拥有代码体,也可以是虚拟的,这样就可以在派生类中重写)
4.接口成员必须都在使用接口的类上实现---它们没有代码体
5.接口成员是公共的(因为它们倾向于在外部使用),但抽象类的成员可以是私有的(只要它们不是抽象的),受

保护的,内部的或受保护的内部成员(其中受保护的内部成员只能在应用程序的代码或派生类中访问)
6.接口不能包含字段,构造函数,析构函数,静态成员或常量

posted on 2010-01-18 09:08  _eagle  阅读(7373)  评论(0编辑  收藏  举报