サブクラスB、C、Dを持つ基底クラスAがあるとします。クラスごとに、それぞれにオーバーロードを含むMyClassクラスがあります。これらのメソッドの1つがMyClass以外のどこからでも呼び出されると、いつでもカウンタをインクリメントすることができます。これは、いくつかの簡単なヘルパーメソッドで実現できます。C#重複したロジックの回避
public class MyClass
{
int counter;
public doSomethingExternal(B b) {counter++; doSomething(b);}
public doSomethingExternal(C c) {counter++; doSomething(c);}
public doSomethingExternal(D d) {counter++; doSomething(d);}
private doSomething(B b) {...}
private doSomething(C c) {...}
private doSomething(D d) {...}
}
これは本当に私の開発者を悩ましています。それらのヘルパーメソッドを書くことができるので、サブクラスごとにロジックが重複しないようにすることはできません。私は一般化のこの種は、リフレクションを達成することができるが、私は反射が一般的に遅く、理解するために複雑になることを聞いたことがあると思います
// Magically, we know which type we are and call the correct doSomething
public doSomethingExternal(A a) {counter++; doSomething(a);}
:私は想像する解決策のようなものです。私はこの論理重複の問題を解決するために見過ごされている従来のパターンがあるのではないかと不思議です。
[テンプレートメソッドパターン](https://www.tutorialspoint.com/design_pattern/template_pattern.htm)が役立つかもしれません。 – ckruczek
'A'、' B'と 'C'がインタフェースのように共通のものを共有していれば役に立ちます。 – ja72
私は 'C#' 7.0に正しいパターンを呼び出すのに役立つパターンマッチングがあると思います。 – ja72