现在的位置: 首页 > 综合 > 正文

C#入门经典―― 9.1 C#中的类定义

2012年10月27日 ⁄ 综合 ⁄ 共 2052字 ⁄ 字号 评论关闭

C#使用class关键字来定义类。其基本结构如下:

class MyClass

{

//类成员

}

定义一个类后,可以在项目中能访问该定义的其他地方对该类进行实例化。在默认情况下,类声明为内部的(internal),即只有当前项目中的代码才能访问他。可以用internal访问修饰符显式指定,但这是不必要的。另外,还可以指定类是公共的,则可以由其他项目中的代码来访问。为此,要使用关键字public。

pbulic class MyClass

{

//Class members

}

除了这两个访问修饰符关键字外,还可以指定类是抽象的(不能实例化,只能继承,可以有抽象成员)或密封的(sealed,不能继承)。为此,可以使用两个互斥的关键字abstract或sealed。所以,抽象类必须用下述方式声明:

public abstract class MyClass

{

//Class members,may be abstract.

}

其中MyClass是一个公共抽象类,也可以是内部抽象类。密封类的声明如下所示:

public sealed class MyClass

{

//Class members.

}

与抽象类一样,密封类也可以是公共或内部的。

还可以在类定义中指定继承。为此,要在类名的后面加上一个冒号,其后面是基类名,例如:

public class MyClass : MyBase

{

//Class members.

}

注意,在C#的定义中,只能有一个基类,如果继承了一个抽象类,就必须实现所继承的所有抽象成员(除非派生类也是抽象类)。

编译器不允许派生类的可访问性比其基类更高。也就是说,内部类可以继承于一个公共类,但公共类不能继承于一个内部类,因此,下述代码是合法的:

public class MyBase

{

//Class members.

}

 

internal class MyClass : MyBase

{

//Class members.

}

但下述代码不能编译:

internal class MyBase

{

//Class members.

}

 

public class MyClass : MyBase

{

//Class members.

}

如果没有使用基类,则被定义的类就只继承于基类System.Object(它在C#中的别名是object)。毕竟,在继承层次结构中,所有类的根都是System.Object。

除了以这种方式指定基类外,还可以在冒号的后面指定支持的接口。如果指定了基类,它必须紧跟在冒号的后面,之后才是指定的接口。如果没有指定基类,则接口就跟在冒号后面。必须使用逗号分隔基类名(如果有基类)和接口名。

例如,给MyClass添加一个接口,如下所示:

public class MyClass : IMyInterface

{

//Class members.

}

所有的接口成员都必须在支持该接口的类中实现,但如果不想使用给定的接口成员,可以提供一个"空"的执行方式(没有函数代码)。还可以把接口成员实现为抽象类中的抽象成员。

下面的声明是无效的,因为基类MyBase不是继承列表中的第一项:

public class MyClass : IMyInterface,MyBase

{

//Class members.

}

指定基类和接口的正确方式如下:

public class MyClass : MyBase,IMyInterface

{

//Class members.

}

还可以指定多个接口,所以下面的代码是有效的:

public class MyClass : MyBase,IMyInterface,IMySecondInterface

{

//Class members.

}

表9-1 是类定义中可以使用的访问修饰符的组合。

修饰符

含义

无或internal

类只能在当前项目中访问。

public

类可以任何地方访问。

abstract或internal abstract

类只能在当前项目中访问,不能实例化,只能继承。

public abstract

类可以在任何地方访问,不能实例化,只能继承。

sealed 或internal sealed

类只能在当前项目中访问,不能派生。

public sealed

类可以在任何地方访问,不能派生。

 

声明接口的方式与声明类的方式相似,但使用的关键字是interface,而不是class,例如:

interface IMyInterface

{

//Interface members.

}

访问修饰符关键字public和internal的使用方式是相同的,所以要使接口可以公开访问,必须使用关键字public:

public interface IMyInterface

{

//Interface members.

}

关键字abstract和sealed不能在接口中使用,因为这两个修饰符在接口定义中是没有意义的。

接口的继承也可以用与类继承的类似方式来指定。主要的区别是可以使用多个基接口,例如:

public interface IMyInterface : IMyBaseInterface, IMyBaseInterface2

{

//Interface members.

}

抱歉!评论已关闭.