我想知道如何在从他继承的所有特定类中创建抽象方法的实现。
我需要它,因为我有一个抽象类,我在其上创建了一个抽象方法,但是有大约50个特定的类来实现这个方法,并且将是如此无聊的实现一个接一个(即使是{{1} } + ctrl
快捷方式)。
答案 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标志在编译期间。)