抽象类没有任何抽象方法

Moh*_*eem 13 c#

我很惊讶地知道C#中的抽象类是可能的,也没有抽象方法.

abstract class AbstractDemo
{
 public void show()
  {
    Console.WriteLine("In Show Method"); 
   }
}
class MainDemo:AbstractDemo
{
 public static void Main()
 {
    Console.WriteLine("In Main Method");
 }
}
Run Code Online (Sandbox Code Playgroud)

任何解释?

Ita*_*aro 24

有时您不希望提供实例化类的可能性,但您需要将此类作为其他类的基类.

在接口上选择抽象类的原因是您可以提供一些基本实现.


Jon*_*eet 11

这是完全有效的,如果你想提供类似事件的行为,偶尔会有用:提供一个抽象类,其中所有"事件处理程序"都是作为虚方法实现的,默认行为是什么都不做.

然后派生类可以覆盖某些方法,但不必覆盖任何特定方法,因为没有什么是抽象的.这个类仍然是抽象的,因为基类的实例是没有意义的(因为一切都是无操作的).

这种模式在Java中比C#更常见 - 但是在C#中你通常只使用"正确的"事件.


Sru*_*uly 5

抽象类是必须先扩展才能使用的类。这并不意味着函数本身必须是抽象的。

以 Animal 类为例

public abstract class Animal
{
    void Move()
    {
        //whatever
    }
}

public class Fish : Animal
{
    void Swim()
    {

    }
}

public class Dog : Animal
{
    void Bark()
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

所有动物都会移动,但只有鱼会游泳和狗会吠叫。

或者举一个现实生活中的例子。我有一个在我的应用程序中使用的 Asp.net MVC 基本控制器。它有一些我经常需要的基本方法,例如 GetCurrentUser() 和我编写的用于帮助本地化的函数。它还负责跟踪,因此我不必在所有控制器中重写该代码。该类有大约 200 行代码,但没有一个抽象方法。

  • 事实上,我想你会发现大多数狗都会游泳;) (10认同)