1

乡亲

我很惊讶地看到我的代码正常工作,我在抽象类中没有任何抽象方法。但是按照规则,我们应该至少有一个抽象方法,对吧?:S

4

4 回答 4

12

不,您不需要抽象类中的抽象方法。

限制是:

  • 如果一个类具有抽象方法、属性、索引或事件,那么该类也必须是抽象的。
  • 您不能实例化抽象类。

不要求抽象类必须具有抽象方法。

于 2012-06-27T20:00:21.283 回答
5

不,这是完全有效的。事实上,staticC# 中的每个类实际上都是 .NET 中的抽象和密封类。(但是,您不能声明要使用 C# 源代码密封的抽象类。)

C# 4 规范在第 10.1.1.1 节(抽象类)中明确指出了这一点:

允许(但不是必需)抽象类包含抽象成员。

没有抽象成员的抽象类当然很少见,但并非闻所未闻。(不要忘记,不仅仅是方法可以是抽象的——你也可以有抽象的事件和属性。)

于 2012-06-27T20:01:43.057 回答
5

来自MSDN - 摘要(已添加重点):

抽象类可能包含抽象方法和访问器。

您的抽象类只能包含非抽象方法,或者如果您愿意,它可以是空类。它为您提供了一个无法实例化的基类,这可能对多态有用。

于 2012-06-27T20:01:47.713 回答
2

您不需要抽象方法来拥有抽象类。有时仅限制类被实例化并将其指定为某些继承层次结构的基础很有用。所有方法都可以定义在一个抽象类中。

于 2012-06-27T20:01:15.667 回答