ジェネリックタイプのインターフェイスを共通インターフェイスにキャストするにはどうすればよいですか?ジェネリックタイプのインターフェイスを特定のインターフェイスにキャスト
我々は次のインタフェース/オブジェクト考えてみましょう:私たちは、コンソールアプリケーションでそれをコーディングしようと次に
public interface IAction : IAction<object> { }
public interface IAction<T>
{
T PerformAction();
}
public class SomeAction : IAction<string>
{
public string PerformAction()
{
return "some action result value";
}
}
public class OtherAction : IAction<int>
{
public int PerformAction()
{
return 100;
}
}
を:私たちは変換できません」というエラーを回避するにはどうすればよい
List<IAction> actions = new List<IAction>();
actions.Add(new SomeAction());
actions.Add(new OtherAction());
actions.ForEach(e => Console.WriteLine(e.PerformAction()));
「SomeAction」から「IAction」まで」?
そうでない呼び出します。これらのオブジェクトは 'IAction'を実装していません。 'IAction'のリストに入れたいのであれば、実際にそのインターフェースを実装する必要があります(または、エラーメッセージが示すように、それらをオブジェクトに変換する必要があります)。 – Servy
あなたが死んでいる場合は、ダックタイピングを調べてください。ダイナミックなキーワードはそれを可能にし、リフレクションによってそれを実現するナゲットライブラリもあります。その名前は忘れてしまいます。正直言って、あなたはおそらくあなたのデザインを再考する必要があります。 – James
@James 'dynamic'は動的な型付け(したがって名前)を可能にします。ダックの型指定は、静的ではなく、動的ではなく暗黙的に行われます。 – Servy