C#学习记录——C#中的类定义

本文详细介绍了C#中类和接口的定义方法,包括如何指定类的访问级别、抽象和密封特性,以及如何实现继承和接口支持。此外,还讨论了类成员的实现要求。

『梦想还是要有的,万一见鬼了呢?』—— 网络

牛头:梦想还是要有的,万一实现了呢!
马面:啥梦想?当阎王爷啊?

C#中的类定义

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: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.
}

类定义中可以使用的访问修饰符的组合:

在这里插入图片描述
接口的定义
声明接口的方式与声明类的方式相似,但使用的关键字是interface而不是class,例如:

interface IMyInterface
{
	//Interface members.
}

访问修饰符关键字public和interal的使用方式是相同的,与类一样,接口也是默认定义为内部接口。所以要使接口可以公开访问,必须使用public关键字:

public interface IMyInterface
{
	//Interface members.
}

不能在接口中使用关键字abstract和sealed,因为这两个修饰符在接口定义中是没有意义的(它们不包含实现代码,所以不能直接实例化,且必须是可继承的)。
也可以用与类继承类似的方式来指定接口的继承,主要的区别是可以使用多个基接口,例如:

public interface IMyInterface:IMyBaseInterface,IMyBaseInterface2
{
	//Interface members.
}

接口不是类,所以没有继承System.Object。但为了方便起见,System.Object的成员可以通过接口类型的变量来访问。如上所述,不能用实例化类的方式来实例化接口。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雷工笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值