c# - 我可以强制子类重写一个方法而不使它抽象吗?

标签 c# .net visual-studio-2008 abstract-class

我有一个带有一些抽象方法的类,但我希望能够在设计器中编辑该类的子类。但是,设计者不能编辑子类,除非它可以创建父类的实例。所以我的计划是用 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/

相关文章:

C# MongoDB Upsert - 'BsonValue(Guid) is obsolete: ' 使用 BsonBinaryData 构造函数并指定 Guid 表示形式'

c# - 为什么我的 List<> 对象会出现对象引用错误?

sql-server - SQL Server 2008 Express 版连接问题

c++ - 调整属性表的错误

c# - MSIL : Why does Array initializer use dup

c# - 如何使用 HtmlAgilityPack 将 <br> 标签替换为 <br/> 标签?

.net - 使 .NET 截图工具与多个监视器兼容

.net - 将图像从 SQL 中的 FILESTREAM 流式传输到浏览器的最快方法是什么?

c# - 将 float 转换为 double

visual-studio-2008 - Visual Studio 加载项 API 资源