我正在一個項目上工作,我有一個關於轉換類型的問題。類型參數和錯誤的約束「不能隱式轉換類型」
問題:
無法隱式轉換類型 'ConsoleApplication2.Imp.StorageImp' 到 「ConsoleApplication2.Storage(ConsoleApplication2.Item)
我簡單的代碼:
public interface IItem
{
void Add();
}
public abstract class Item : IItem
{
public abstract void Add();
}
public class ItemImp : Item
{
public override void Add()
{
throw new NotImplementedException();
}
}
public interface IStorage<T> where T : Item
{
List<T> Get();
bool Add(T item);
}
public abstract class Storage<T> : IStorage<T> where T : Item
{
public abstract bool Add(T item);
public abstract List<T> Get();
}
public class StorageImp : Storage<ItemImp>
{
public override bool Add(ItemImp item)
{
throw new NotImplementedException();
}
public override List<ItemImp> Get()
{
throw new NotImplementedException();
}
}
轉換問題代碼(我試圖將實現轉換爲基類):
class Program
{
static void Main(string[] args)
{
Storage<Item> storage = new StorageImp();
}
}
請幫幫我。
您無法將派生類轉換爲其基類,但您可以將其轉換爲 – 2015-11-04 04:08:30
爲什麼我無法將派生類轉換爲基類? –
爲什麼你在這裏有這麼多的抽象層?由於抽象基類沒有真正提供任何基本功能,你只是混淆了類型系統。如果你的實際實現遵循你的例子,我會拋棄抽象類,讓具體的實現直接實現接口。 –