gpt4 book ai didi

c# - 禁止覆盖调用 base

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:29 25 4
gpt4 key购买 nike

我想做这样的事情:

public class MyClass {
public virtual void Foo() {
this.DoSomethingThatWouldBeFineInASubclassButAnOverrideWouldNotWantToUse();
}
}

基本上,我在这里做一些工作,我想要一个默认的方式来做这件事,但如果有人要覆盖,他们可能不会使用默认方式。不用考虑就可以很容易地将 base.Foo() 置于覆盖中;事实上,我的 IDE 会自动完成。我想阻止这种情况。可能吗?

最佳答案

用组合而不是继承可以更好地解决这个问题。也许,使用 strategy pattern :

interface ISomeStrategy
{
void Do();
}

public class MyClass {

private readonly ISomeStrategy _strategy;

public MyClass() : this(null) {}

public MyClass(ISomeStrategy strategy)
{
// the default implementation and the user-defined implementation
// are mutually exclusive
_strategy = strategy ?? new DefaultStrategy();
}

public void Foo()
{
_strategy.Do();
}

//secret strategy
private class DefaultStrategy : ISomeStrategy
{
public void Do()
{
//secret implementation
}
}
}

子类化:

public class Derived : MyClass
{
public Derived() : base(new DerivedStrategy())
{

}
}

有点冗长,但有效。

关于c# - 禁止覆盖调用 base,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30572688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com