Wil*_*sch 1 c# overriding virtual-functions subclassing
我想做这样的事情:
public class MyClass {
public virtual void Foo() {
this.DoSomethingThatWouldBeFineInASubclassButAnOverrideWouldNotWantToUse();
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我在这里做一些工作,我想要一个默认的方法,但如果有人要覆盖,他们可能不会使用默认.将base.Foo()放入覆盖中而不考虑它是如此容易; 实际上我的IDE会自动完成.我想防止这种情况.可能吗?
这可以通过组合而不是继承来更好地解决.也许,使用策略模式:
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
子类:
public class Derived : MyClass
{
public Derived() : base(new DerivedStrategy())
{
}
}
Run Code Online (Sandbox Code Playgroud)
有点冗长,但有效.