仅具有基类实现的 C# 抽象方法?

标签 c# architecture inheritance oop

考虑以下问题:

你有一个类“A”作为许多其他类似类的基类,例如。一个名为 B 的类。

A 类本身很有用(并且已经在各处使用),因此不是抽象的。

关键是您现在希望实现一个新协议(protocol),要求所有继承自 A 的类(包括 A 本身)实现方法“func()”。如果子类忘记实现 func() ,则应该出现编译器错误。

class A {
  A func() { ret new A(...) }
}

class B : A {
  A func() { ret new B(...) }
}

class C : A {
  // Should give error : no func()
}

问题清楚了吗?我不能将 A::func() 抽象化,因为我希望能够继续将 A 用作具体类。我不能使它成为虚拟的,因为这会导致子类退回到父类(super class)(并且不会给出编译器错误)。

唯一接近解决方案的是创建一个新的抽象类 A* 并让所有自定义类型继承自该类,并将 A 作为具体类的所有当前用法替换为继承自 A 的新类“DefaultA” *。这看起来很乱。请告诉我还有其他方法可以做到这一点吗?

最佳答案

如果子类型不覆盖特定方法,根本没有办法既保持 A 为具体类型又强制编译器出错。

关于仅具有基类实现的 C# 抽象方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718588/

相关文章:

java - 有什么方法可以指定抽象类中方法的返回值应该与包含类具有相同的类型吗?

c++ - 错误 LNK2001 : unresolved external symbol C++

c# - 编辑器中的全屏模式游戏 View

c# - 将字符串转换为颜色

具有多个持久层的 PHP DataMapper

architecture - 发布-订阅模式的 zmq vs redis

c# - 为项目还原 NuGet 包失败... : Could not find a part of the path

c# - 为什么我不能从我的 XPathNavigator 中检索属性值?

validation - 您在哪里进行验证?

kotlin - 通用接口(interface)继承