ジェネリックスを学ぼうとしていますが、私は頭がおかしくなりません。ここでC#でマルチパラメータジェネリックメソッドを実装する
は、劇中のインタフェースとクラスです:
public interface IQueryExecutor
{
T ExecuteQuery<T>(IQuery<T> query);
T ExecuteQuery<T, T1>(IQuery<T, T1> query);
}
public interface IQuery<out T>
{
T Execute();
}
public class StringQuery : IQuery<string>
{
public string Execute()
{
return "String query executed";
}
}
public interface IQuery<out T, in T1>
{
T Execute(T1 input);
}
public class ListQuery : IQuery<List<string>, string>
{
public List<string> Execute(string input)
{
return new List<string>() { input };
}
}
問題は、私はqueryExecutorにおける第二の方法を実装しようとすると発生します。
public class QueryExecutor : IQueryExecutor
{
public T ExecuteQuery<T>(IQuery<T> query)
{
return query.Execute();
}
public T ExecuteQuery<T, T1>(IQuery<T, T1> query)
{
return query.Execute(T1 input);
}
}
を私はパラメータとしてT1を渡したいですメソッドの実装ですが、これは不可能です(AutofacのようなIoCコンテナを使用することで可能ですが、それは私が望むものではありません)。助けて!私が理解していないジェネリック医薬品のいくつかの非常に基本的なものがなければならない。
そこで問題は、どのように私は実装しないされています
public T ExecuteQuery<T, T1>(IQuery<T, T1> query)
{
return ????
}
ここでこのパラメータをこのように渡しませんか? T ExecuteQuery(IQuery クエリ、T1パラメータ); –
MistyK
'query.Execute(T1 input)'には、正確に何が期待されますか? – poke
リンクされた質問は構文についてのものなので、重複しているとは思っていませんか? 私はクエリの実装の例を追加して、クエリで何ができるかを明確にしました。 @MistyK:可能な回避策です。私はそれをテストし、それは動作します。元のコードをそのまま動作させることができない場合、解決策としてあなたの答えを受け入れるでしょう – Hos