我正在开展一个项目,我对转换类型有疑问。
问题:
无法将类型'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();
}
}
请帮帮我。
答案 0 :(得分:1)
编译器报告错误,因为Storage<Item>
不是StorageImp
的基类。相反,Storage<ItemImp>
是StorageImp
的基类。
所以替换
Storage<Item> storage = new StorageImp();
与
Storage<ItemImp> storage = new StorageImp();
<强>更新强>
如果你想从类的实现中抽象出来&#34; ItemImp&#34;如上所述,您需要使StorageImp
具有通用性,如下所示:
class Program
{
static void Main(string[] args)
{
Storage<Item> storage = new StorageImp<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<T> : Storage<T> where T: Item
{
public override bool Add(T item)
{
throw new NotImplementedException();
}
public override List<T> Get()
{
throw new NotImplementedException();
}
}