我有一个带有一些抽象方法的类,但我希望能够在设计器中编辑该类的子类。但是,设计者不能编辑子类,除非它可以创建父类的实例。所以我的计划是用 stub 替换抽象方法并将它们标记为虚拟 - 但是如果我创建另一个子类,如果我忘记实现它们就不会出现编译时错误。
有没有办法标记方法,使它们必须由子类实现,而不将它们标记为抽象?
最佳答案
你可以做一些涉及 #if
的非常困惑的代码 - 即在 DEBUG
中它是虚拟的(对于设计者),但在 RELEASE
中> 它是抽象的。不过,维护起来真的很痛苦。
但除此之外:基本上没有。如果您想要设计器支持,它就不能是抽象的,所以您只能使用“虚拟”(可能是基本方法抛出 NotImplementedException
)。
当然,您的单元测试将检查方法是否已实现,是吗? ;-p
实际上,通过泛型进行测试可能会很容易 - 即具有以下形式的通用测试方法:
[Test]
public void TestFoo() {
ActualTest<Foo>();
}
[Test]
public void TestBar() {
ActualTest<Bar>();
}
static void ActualTest<T>() where T : SomeBaseClass, new() {
T obj = new T();
Assert.blah something involving obj
}
关于c# - 我可以强制子类重写一个方法而不使它抽象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/239408/