静态类,抽象类,接口

静态类(static class) VS 普通类(normal class)

1. 静态类不能实例化。

2  静态类不能被继承。

3. 静态类成员(包括属性和方法,下同)必须是静态的。(因为不能实例化,所以无法包含实例成员)

4. 静态类不能作为泛型参数。

5. 只有静态类才能承载扩展方法,换句话说扩展方法的载体必须包含在静态类中

实际上在把静态类编译成IL时,会在它前面添加abstract和sealed两个关键字,分别代表了不能实例化和不能被继承。

但是在实际书写C#代码时,我们程序员不能把一个抽象类(abstract class)定义成密封类(sealed class)。原因会在下面提到。


抽象类(abstract class) VS 普通类(normal class)

1. 抽象类不能被实例化,但可以有构造函数。

2. 抽象类必须被继承通过子类才能实例化。

3. 抽象类可以有抽象成员,也可以没有抽象成员。但如果有抽象成员,则必须是抽象类。(抽象成员就是没有实现的成员)

4. 抽象类的子类可以是抽象类,也可以不是抽象类。如果不是抽象类,则子类必须实现父类的所有抽象成员。如果是抽象类,则子类可以不实现父类的抽象成员。

5. 抽象类不能声明为密封(sealed),因为抽象类必须被继承才能实例化,所以不能继承的抽象类是没有意义的。

6. 抽象成员不能定义为私有(private)和静态(static)


抽象类(abstract class)VS 接口(interface)

其实我们可以把接口看作是特殊的抽象类,这种抽象类包含抽象成员(abstract members).

并且这个抽象类里的所有成员,都不需要程序员去添加修饰符。IL会自动帮我们添加public和abstract修饰符。

接口的实现者必须实现所有的抽象成员,而抽象类的子类则不必要。

 

Note: 静态成员可以存在于普通类,静态类和抽象类中,不能存在于接口中




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值