位置:首页 > 软件操作教程 > 编程开发 > C# > 问题详情

C#中的类定义

提问人:刘团圆发布时间:2020-12-07

C#使用class关键字来定义类:

class MyClass

{

    // Class members.

}

这段代码定义了一个类MyClass定义了一个类后,就可以在项目中能访问该定义的其他位置对该类进行实例化。默认情况下,类声明为内部的,即只有当前项目中的代码才能访问它。可使用internal访问修饰符关键字来显式地指定这一点,如下所示(但这没有必要):

internal class MyClass 

{

    // Class members.

}

另外,还可以指定类是公共的,可被其他项目中的代码访问。为此,要使用关键字public:

public 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 : IMylnterfaco 

{

    // Class members.

}

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

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

public class MyClass : IMylnterface, MyBase 

{

    // Class members.

}

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

public class MyClass : MyBase, IMylnterface 

{

// Class members.

}

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

public class MyClass : MyBase, IMyInterface, IMySocondlntorface 

{

    // Class members.

}

下表列出了类定义中可以使用的访问修饰符的组合。

修饰符

含义

无或 internal

只能在当前项目中访问类

public

可以在任何地方访问类

abstract internal abstract

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

public abstract

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

sealed internal sealed

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

public sealed

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

继续查找其他问题的答案?

相关视频回答
回复(0)
返回顶部