次の 2 つのクラスから始めるとします。
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。