我不會只用一個方法拆箱這樣的:如何使用泛型?
public interface IModule<T, U>
where T : BaseBox
where U : BaseItem
{
U[] GetItems<T>(int id);
}
public sealed partial class Module<T, U> : IModule<T, U>
where T : BaseBox
where U : BaseItem
{
U[] IModule<T, U>.GetItems<T>(int id)
{
return T.Unboxing(); // It is wrong!
}
}
但我不能。我該如何編寫正確的泛型?
下一頁代碼understand.I品的類型:
public abstract class BaseItem
{
protected int _id;
protected string _description;
}
public sealed class TriangleItem : BaseItem
{
public int TriangleId { get { return _id; } set { _id = value; } }
public string TriangleDescription { get { return _description; } set { _description = value; } }
public Color color { get; set; }
}
public sealed class CircleItem : BaseItem
{
public int CircleId { get { return _id; } set { _id = value; } }
public string CircleDescription { get { return _description; } set { _description = value; } }
public int Radius { get; set; }
}
然後,我有盒項目:
public abstract class BaseBox
{
public string ItemsXml { get; set; }
public abstract BaseItem[] Unboxing();
}
public sealed class TriangleBox : BaseBox
{
public TriangleItem[] Unboxing()
{
return Util.FromXml(ItemsXml).Select(i => new TriangleItem { TriangleId = int.Parse(i), TriangleDescription = i, Color = Color.Red }).ToArray();
}
}
public sealed class CircleBox : BaseBox
{
public CircleItem[] Unboxing()
{
return Util.FromXml(ItemsXml).Select(i => new CircleItem { CircleId = int.Parse(i), CircleDescription = i, Radius = 5 }).ToArray();
}
}
在這裏,我有不同的實現拆箱法。
你已經寫了'T.Unboxing()'好像它是一個靜態方法,你需要一個實例使用 – Sayse
你要麼需要問正確的'T'作爲參數,或者使用你的'int id'來獲取它。 – Nolonar
我真的覺得你應該放棄泛型,並嘗試做純粹的面向對象設計。 C#中的泛型不像其他基於類的語言那樣強大,比如Haskell。濫用這種泛型只是在問問題。 – Euphoric