Liny_@NotePad

沉迷ACG中

<C#高级编程>第4章笔记

YOYO posted @ 2010年3月04日 20:01 in 【C#】 with tags C#高级编程 , 1640 阅读

4 继承


C#更类似于Java,只能单继承,但是可以派生于多个接口。

 

    【与Java反义的:“实现”类,“派生”接口。】

 

实现继承

 

所有的实现继承都是public继承,语法上类似于C++,不用声明修饰符。形如

public class MyDerivedClass: MyBaseClass, IInterface1, IInterface2

{

// etc

}

若不定义实现的类,则默认认为其实现的是object

 

对于结构体,不能实现其他类,但可以派生任意多个接口。形如

public struct MyDerivedStruct: IInterface1, IInterface2

{

// etc

}


 

虚方法

 

C++的相似,与Java的不同。虚方法必须显示指定virtual关键字,否则不会重写。属性也可以声明为virtual

另外,方法重写时必须强制使用override关键字,避免方法签名与基类版本并不一致。

 

隐藏方法

 

如果签名相同的方法在基类和派生类中都有声明,而又未声明为virtualoverride。则派生类方法就会隐藏基类方法。此时调用哪个方法取决于引用对象的类型。

 

若要加上一个基类没有的方法,需要加上new关键字来显式声明要隐藏基类的方法。

定义后在新的版本中C#会提示用户不要试图通过引用类型是基类类型的子类对象来访问这个方法。

 

抽象类与抽象函数

 

java相似,C#将抽象类和抽象函数用abstract修饰。同时,抽象函数也是virtual的,只是不要为其提供关键字。

 

密封类与密封方法

 

类似Java中的final,在C#中可以通过sealed关键字来修饰类和方法。

sealed类表示不能继承该类;sealed方法表示不能重写该方法。

修饰方法时必须与override一起用,如果自己的代码不想被人重写,不用virtual声明即可,

如果是override的方法,为防止再次重写,可以修饰为sealed


接口

 

类似于Java中的接口。C#的接口中一般情况下只能包含方法、属性、索引器和事件的声明。


修饰符

    可见性修饰符

    修饰符

    应用于

    说明

    public

    所有的类型成员

    任何代码都可以访问该方法

    protected

    类型和内嵌类型的所有成员

    只有派生的类能访问该方法

    internal(默认)

    类型和内嵌类型的所有成员

    只能在包含它的程序集中访问该方法

    private

    所有的类型成员

    只能在它所属的类型中访问该方法

    protected internal

    类型和内嵌类型的所有成员

    只能在包含它的程序集和派生类型的代码中访问该方法

 

    其他修饰符

    修饰符

    应用于

    说明

    new

    函数成员

    成员用相同的签名隐藏继承的成员

    static

    所有的成员

    成员不在类的具体实例上执行

    virtual

    仅类和函数成员

    成员可以由派生类重写

    abstract

    类不能实例化

    abstract

    函数成员

    虚拟成员定义了成员的签名,但没有提供实现

    override

    仅函数成员

    成员重写了继承的虚拟或抽象成员

    sealed

    不能被其他类继承。

    sealed

    函数成员

    成员重写了继承的虚拟成员,但继承该类的任何类都不能重写该成员。必须与override一起使用。

    extern

    仅静态方法(DllImport

    成员在外部用另一种语言实现

 

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter