C#中的抽象类没有任何抽象方法

时间:2012-06-27 19:59:25

标签: c# .net

民间

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

4 个答案:

答案 0 :(得分:11)

不,你在抽象类中不需要抽象方法。

限制是:

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

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

答案 1 :(得分:5)

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

C#4规范在第10.1.1.1节(抽象类)中明确地调用了它:

  

允许(但不要求)抽象类包含抽象成员。

拥有一个没有抽象成员的抽象类肯定是罕见,但这并不是闻所未闻。 (不要忘记它不仅仅是抽象的方法 - 你也可以有抽象的事件和属性。)

答案 2 :(得分:5)

来自MSDN - abstract(强调补充):

  

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

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

答案 3 :(得分:2)

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