非抽象类中的抽象方法反之亦然

时间:2014-02-05 05:21:40

标签: c# abstract

在抽象类和非抽象类中抽象方法中定义非抽象方法的目的是什么?

使用这些的有用场景是什么?

4 个答案:

答案 0 :(得分:3)

  1. 您不能在非抽象类中声明abstract方法。来自C#规范:

      

    10.6.6抽象方法

         

    (...)抽象方法声明仅允许在抽象类(第10.1.1.1节)中使用。

  2. abstract类中的非抽象方法是一种不必(或有时甚至不能)在派生类中重新实现的方法。

    它们提供了一些在所有派生类中独立且相同的实现(当不标记为virtual时)或者可以被覆盖但具有一些默认行为(使用virtual修饰符)时

    这主要是抽象类与接口(不能包含任何实现)的区别。

答案 1 :(得分:1)

抽象类的一个特性是除了必须实现的抽象方法之外,您还可以实现基类功能。这对代码重用很有用。

非抽象类中不能有抽象方法。

答案 2 :(得分:1)

  

在抽象类中定义非抽象方法的目的是什么?

一个抽象类只声明抽象方法,与声明一个接口没什么不同;通常,抽象类包括一些最小/默认的与实现无关的功能,同时为依赖于实现的事物留下抽象存根。

  

...和非抽象类中的抽象方法?

您不能在非抽象类中声明抽象方法。

答案 3 :(得分:1)

在这种情况下,

将您的方法定义为Virtual而不是Abstract。