假设您从这两个类开始:
public class Foo{
public virtual Baz Bar(){
return GetStandardBaz();
}
}
public class Qux: Foo{
public virtual Baz Bar(){
return GetQuxBaz();
}
}
现在让我们说一个需求在被调用Baz
时返回它之前做一些事情。Bar
我会创建一个virtual protected
方法,并virtual
从公共方法中删除,如下所示:
public class Foo{
public Baz Bar(){
var value = BarInternal();
DoSomethingFirst(value);
return value;
}
protected virtual Baz BarInternal(){
return GetStandardBaz();
}
}
public class Qux: Foo{
protected override Baz BarInternal(){
return GetQuxBaz();
}
}
这确保了每当Bar
调用 get 时,结果都会在返回之前Baz
传入。DoSomethingFirst
是的,这是对所有子类的重大更改,但它不需要对Bar
.
这是标准的设计模式吗?有没有更好的方法让我想念?还想知道是否有比Internal
.