をインスタンス化:は、私は2つのインタフェースを持っている一般的なインタフェース
public interface IReportRow
{
List<string> ToList();
}
public interface IReportPreparer<T>
where T : IReportRow
{
List<T> GetRows(JObject json);
string GetAdditionalData(T reportRow);
}
IReportRow
インタフェースの実装クラス:私はしようとすると、今
public class SellingReportPreparer :
IReportPreparer<SellingReportRow>
{
...interface implementation
}
:
public class SellingReportRow : IReportRow
{
...interface implementation
}
とIReportPreparer
インタフェースを実装するクラスをSellingReportPreparerクラスのインスタンスを次のようにします。
IReportPreparer<IReportRow> preparer = new SellingReportPreparer()
Intellisenseは、SellingReportPreparer to IReportPreparer<IReportRow>
からの明示的な変換が必要であることを伝えます。私はこのように明示的に変換する
: - 両方の方法はIReportRow
の同じ実装タイプで動作しますように、私は、一般的なことIReportPreparer
インタフェースを必要とするUnable to cast object of type VSKCasco.ReportPrepare.SellingReportPreparer to type VSKCasco.ReportPrepare.IReportPreparer1[VSKCasco.ReportPrepare.IReportRow]
IReportPreparer<IReportRow> preparer = (IReportPreparer<IReportRow>)(new SellingReportPreparer());
私は例外を取得します。 SellingReportPreparer
のインスタンスを作成するにはどうすればよいですか?あなたはIReportPreparer
はその後、このラインは、(H/T @GiladGreen)、しかし
IReportPreparer<IReportRow> preparer = new SellingReportPreparer();
をコンパイルしますout
public interface IReportPreparer<out T>
where T : IReportRow
{
//List<T> GetRows(JObject json);
//string GetAdditionalData(T reportRow);
}
としての一般的なパラメータを指定するようにする必要があり
これでは不十分です。それでもコンパイルエラー –
をコンパイルできますか? – Valentin
@Jamiec - あなたがコメントに入れた線を含めるなら - はい –