2つの制限を考慮してください-
- MyPropertyをインターフェイスまたは抽象クラスに移動できません。
- FooEventHandlerはドットネットフレームワークメソッドであるため、パラメーターの種類を変更することはできません。
MyPropertyをいくつかのクラスで定義しています。
class A
{
public string MyProperty { get; set; }
}
class B
{
public string MyProperty { get; set; }
}
class C
{
public string MyProperty { get; set; }
}
メソッドFooEventHandlerは、受け取ったすべてのパラメーターについてこのプロパティを更新します。
public object FooEventHandler(object obj)
{
object toReturn = null;
if (obj.GetType() == typeof(A))
{
(obj as A).MyProperty = "updated";
toReturn = obj;
}
else if (obj.GetType() == typeof(B))
{
(obj as B).MyProperty = "updated";
toReturn = obj;
}
else if (obj.GetType() == typeof(C))
{
(obj as C).MyProperty = "updated";
toReturn = obj;
}
return toReturn;
}
そして、FooEventHandlerはこのように繰り返し呼び出されます-
static void Main(string[] args)
{
Program program = new Program();
A objA = new A();
program.FooEventHandler(objA);
B objB = new B();
program.FooEventHandler(objB);
C objC = new C();
program.FooEventHandler(objC);
}
一般に上記の2つの制限を考慮して、Fooで冗長なコードを削除する方法を提案してください。
より正確には、WCFでParameterInspectorを使用しているときにこの問題が発生しました。ここでインターセプトされたすべてのリクエストを適切に変更しようとしていますが、operationNameに基づいてSwitchCaseを作成する必要がありました。
上記のA、B、C、Dクラスはプロキシです。したがって、そもそもそれらを変更したくありません。サービスリファレンスを更新すると、iterfaceの変更が上書きされます。
public object BeforeCall(string operationName, object[] inputs){
// update inputs[0] properties
}
ご協力ありがとうございました。