【发布时间】:2019-03-21 18:42:59
【问题描述】:
我有以下类和方法
public class X
{
public static void M1(...)
{
...
var isSomething = M2(...);
...
}
public static bool M2(...) { ... }
}
我需要实现一个新的具有相同签名的 M2 方法,以便在某些情况下调用。 为此,我想实现一个扩展 X 的新类 Y 并覆盖 M2 方法,所以当我调用 Y.M1() 时,我想使用 y.M2()。
public class Y : X
{
public static [override] bool M2(...) { ... }
}
但是静态方法不能被覆盖。 任何人都可以建议我如何做到这一点?
【问题讨论】:
-
您选择
X和Y作为示例类名有点有趣,因为这可能是XY problem。您能否为我们提供更多有关您正在尝试做的事情以及为什么要这样做的背景信息? -
这听起来确实像你实际上需要一些完全不同的东西,但只是假设覆盖一个静态方法将是解决方案。但是如果没有任何关于为什么需要这个的进一步信息,很难猜测。为什么不直接设置一些条件并调用一种方法或另一种方法?
-
@cesarfaria
M2()真的需要是静态的吗?如果没有,只需删除static修饰符。只要此方法不需要在不引用class X实例的情况下从其他类调用,这始终是可能的。否则,为M2()创建一个virtual包装器并从M1()调用它。然后用调用另一个M2()的方法覆盖这个。
标签: c# methods overriding