如何自动创建基类的覆盖实现?

时间:2016-02-29 14:31:53

标签: c# visual-studio

我想知道如何在从他继承的所有特定类中创建抽象方法的实现。

我需要它,因为我有一个抽象类,我在其上创建了一个抽象方法,但是有大约50个特定的类来实现这个方法,并且将是如此无聊的实现一个接一个(即使是{{1} } + ctrl快捷方式)。

2 个答案:

答案 0 :(得分:4)

您可以右键单击每个类并选择实现抽象类,这将创建一个空的metmber-body,除了抛出NotImplementedException之外什么也不做。

但是我看不出你应该这样做的任何理由。如果您的方法应该有默认实现,则它不应该是基类的abstract,而是virtual

abstract class MyBaseClass {
    virtual void DoSomething() 
    {
        // do nothing
    }
}

class Derived : MyBaseClass {
    override void DoSomething() 
    { 
        Console.WriteLine(); 
    }
}

您现在不必在所有派生类上实现该方法。因此,只要您测试(或者出于任何奇怪的原因,您需要这样做),您可以继续使用默认实现,而当发布时通过将修饰符从virtual添加到abstract并删除方法体,强制每个类实现成员的软件。

答案 1 :(得分:0)

如果我能正确理解您的问题,您可以按照adapters for Java event listeners

的模式进行操作

它们是位于抽象类(Java中的接口)之上的中间类,为所有抽象函数提供或多或少有意义(实际上是空的)默认实现。你的类从这个适配器继承(现在或者永远),只覆盖一些函数。

如果所有类都作为永久解决方案从此适配器继承,那么为什么要开始使用抽象类可能是个问题。定义没有实现的接口只是为了避免Java和C#中有关多继承的限制。如果基类仍然有一些实现,那么你也可以为其余的抽象方法提供默认值。如果这是不希望的,因为在生产代码中,必须强制继承者实现自己的方法,因为没有合理的默认值,实际上可以通过条件转换禁用实现代码(例如,使其依赖于DEBUG或TEST标志在编译期间。)