【发布时间】:2012-02-04 09:26:30
【问题描述】:
考虑以下情况:
public class Storage
{
public T GetSingleByID<T>(long id) where T : IStorable
{
// do some magic to return the object based on T and the id
}
}
public class Beer : IStorable
{
}
public class BeerStorage : Storage
{
}
BeerStorage beerStorage = new BeerStorage();
Beer beer = beerStorage.GetSingleByID(5); /* compile error here */
由于无法推断类型,我得到一个编译错误,原因很明显。很公平。但是有没有办法让编译器能够根据我在BeerStorage而不是Storage上调用GetSingleByID这一事实来推断正确的类型?我想说编译器应该有一种方法可以看到这种差异并为我推断 T?
如何在Beer 和BeerStorage 之间建立关系,以便编译器可以推断出正确的类型?
【问题讨论】:
-
我可以看到
Beer和BeerStorage之间没有任何关系。将您的beer变量声明为Beer在这里并没有真正的帮助...... -
@BoltClock,是的,我知道
Beer和BeerStorage之间没有关系,这会导致编译错误。我的问题是,如何建立这种关系?提前致谢。 -
@delnal,不,显然这行不通。但基于其他一些我可能不知道的事情。你能告诉我你将如何解决这个问题吗?谢谢。
-
你应该从
Storage<Beer>派生BeerStorage