[英]Generic interface implementation - order of execution
我有以下通用接口
public interface ISerializer<T>
{
MemoryStream Serialize(IList<T> list);
MemoryStream Serialize(T obj);
}
當我實現如下界面時
ISerializer<IList<BarcodeScannerModel>> Serializer = new Serializer<IList<BarcodeScannerModel>>();
var memstream = Serializer.Serialize(list);
object myObject = new object();
ISerializer<object> Serializer = new Serializer<object>();
var memStr = Serializer .Serialize(myObject);
兩種實現都使用MemoryStream Serialize(T obj);
我的問題是為什么列表版本使用MemoryStream Serialize(T obj);
而不是Serialize(IList<T> list);
版?
你打電話的原因
var memstream = Serializer.Serialize(list);
正在打電話
MemoryStream Serialize(T obj);
當泛型被“填寫”時,你的界面“看起來像”(偽代碼):
public interface ISerializer<IList<BarcodeScannerModel>>
{
MemoryStream Serialize(IList<IList<BarcodeScannerModel>> list);
MemoryStream Serialize(IList<BarcodeScannerModel> obj);
}
因此,當將IList<BarcodeScannerModel>
傳遞給Serialize()
它會正確地選擇obj
重載(請注意,正確地不等於所需的)。
如果你想要它打電話
MemoryStream Serialize(IList<T> list);
然后你需要定義你的serializer
如:
ISerializer<BarcodeScannerModel> serializer = new Serializer<BarcodeScannerModel>();
基本上你是在加倍IList
你有沒有嘗試過
ISerializer<BarcodeScannerModel> Serializer = new ...
我的猜測是因為您的接口方法是為List<T>
定義的,同時您將List<Barcode...>
作為T
傳遞,您的實際參數不是預期的類型。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.