Iている次のインターフェイス宣言:C#でジェネリックを実装するインタフェースパラメータを持つメソッドに2つの同様の具象オブジェクトを渡すにはどうすればよいですか?
interface IOrder<T> where T: IOrderItem
{
IList<T> Items { get; set; }
}
interface IDistro<T> : IOrder<T> where T: IOrderItem
{
}
私はそうのように、2つの具象クラスを持っている:
public static void UpdateDistro(IDistro<IOrderItem> distro)
{
}
:
// DistroItem implements IOrderItem
public class Distro : IDistro<DistroItem>
{
public IList<DistroItem> Items { get; set; }
}
// PerishableOrderItem implements IOrderItem
public class PerishableOrder : IDistro<PerishableOrderItem>
{
public IList<PerishableOrderItem> Items { get; set; }
}
最後に、私は、データベースに保存するための静的サービスメソッドを持っています
私の問題は、いずれの具体的なタイプのディストリビューションを静的メソッドに渡すにはどうすればいいですか?以下はコンパイルされません:
Distro d = new Distro();
UpdateDistro(d);
をエラーは次のとおりです。
The best overloaded method match for UpdateDistro(IDistro<IOrderItem>)' has some invalid arguments
は答えcontravarianceですか?元のインターフェイス宣言に<in T>
を追加しようとしましたが、解決できなかったエラーが追加されました。これは私の最初のインターフェイスへの深い進出であり、ジェネリックスが複雑さを増していると確信しているので、ここでは基本的な理解の欠如があるかもしれません。
はい、私はそれを試みました。それは 'Distro'オブジェクトを渡すときにまだ不平を言いました。 'UpdateDistro(myDistro)'は同じエラーを投げました。 –
IronicMuffin
私はこれがupvotesを得ているのを見る。メソッドを呼び出す適切な方法を私に示すことができるなら、それを答えとしてマークします。 – IronicMuffin
ありがとうございます。申し訳ありませんが痛みです。私はインターフェイスタイプなどにキャストしていた他のテストから残っていました。これは必要に応じて機能します。とても有難い! – IronicMuffin