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

C# 非抽象类中的抽象方法反之亦然,c#,abstract,C#,Abstract,在抽象类中定义非抽象方法和在非抽象类中定义抽象方法的目的是什么 使用这些工具的有用场景在哪里 抽象类的一个特性是,除了必须实现的抽象方法之外,还可以实现基类功能。这有利于代码重用 非抽象类中不能有抽象方法 不能在非抽象类中声明abstract方法。从C#规范: 10.6.6抽象方法 (…)抽象方法声明只允许在抽象类中使用(§10.1.1.1) abstract类中的非抽象方法是一种不必(有时甚至不能)在派生类中重新实现的方法 它们提供了一些独立的实现,在所有派生类中都是相同的(当不标记为vir

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


使用这些工具的有用场景在哪里

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

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

  • 不能在非抽象类中声明
    abstract
    方法。从C#规范:

    10.6.6抽象方法

    (…)抽象方法声明只允许在抽象类中使用(§10.1.1.1)

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

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

    这主要是抽象类与接口(不能包含任何实现)的不同之处

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

    一个只声明抽象方法的抽象类与声明一个接口没有什么不同;通常,抽象类包含一些最小/默认实现独立的功能,同时为依赖于实现的内容保留抽象存根

    …和非抽象类中的抽象方法


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

    在本例中,将方法定义为虚拟方法而不是抽象方法