我很确定有一个简单的答案,围绕着协变,但我很难看到它!使用泛型类型铸造
我有一个类,如下所示:
internal sealed class GenericCallbackClass<T> : SomeBaseClass
where T : ICallbackMessageBase
{
public GenericCallbackClass(string activeId, T message)
: base(activeId)
{
Message = message;
}
public T Message { get; private set; }
}
我然后创建实现ICallbackMessageBase叫Foo的一个类的实例和实例在此传递作为参数对于T 例如一个新GenericCallbackClass var myCallback = new GenericCallback<Foo>("SomeID", new Foo())
我现在想把它转换为GenericCallbackClass的更通用的实例,因为我将有许多Foo,Bar等实例,但都实现ICallbackMessageBase。
所以,我要像做var callback = myCallback as GenericCallbackClass<ICallbackMessageBase>
看来我不能这样做投...任何想法,我应该怎么解决这个问题?
搜索“co-and contra-variance”,这里有很多关于你的问题。 –
你为什么在这里使用泛型?为什么不是非泛型类,使用'ICallbackMessageBase Message'? – svick
@svick同上...想着同样的事情。 –