リフレクションを介してクラスメソッドを呼び出そうとしています。
public class A
{
public string B(IWork WorkToDo)
{
return WorkToDo.ToString();
}
}
クラス「Work」は「IWork」を継承しています。
Type type = Type.GetType("A");
MethodInfo MI = type.GetMethod("B");
object X = MI.Invoke(Activator.CreateInstance(type), new object[] { new Work() });
上記の行は引数エラーをスローします。「Workの代わりにIWorkが必要です。」
私が書いたら
object X = MI.Invoke(Activator.CreateInstance(type), new object[] { (new Work() as IWork) });
できます。
ポリモーフィズムを自動的に推測して型キャストできない理由を知りたいのですが、それともすべて間違っているのでしょうか。配管を行うためのカスタムバインダークラスを作成できますか?
助けてください。
編集
わかった。本当の問題を隠してくれてすみません。上記で機能します。Array[]でも機能しますが、List<>..でエラーをスローします。
したがって、私のクラスは次のようになります。
public class A
{
public string B(List<IWork> WorkToDo)
{
return WorkToDo.ToString();
}
}
Type type = Type.GetType("A");
MethodInfo MI = type.GetMethod("B");
List<Work> WL = new List<Work>(); WL.Add(new Work());
object X = MI.Invoke(Activator.CreateInstance(type), new object[] { WL });
エラーは次のとおりです。
タイプ'System.Collections.Generic.List1
1[Work]' cannot be converted to type 'System.Collections.Generic.List
[IWork]'のオブジェクト。