次の 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
。