use*_*190 4 c# generics casting
我很确定有一个简单的答案,围绕共同变化,但我很难看到它!
我有一个这样的课:
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; }
}
Run Code Online (Sandbox Code Playgroud)
然后我创建一个类的实例,该类实现名为Foo的ICallbackMessageBase,并实例化一个新的GenericCallbackClass,将其作为T的参数传递,例如 var myCallback = new GenericCallback<Foo>("SomeID", new Foo())
我现在想把它转换为GenericCallbackClass的更通用的实例,因为我将有很多这样的实例与Foo,Bar等,但都实现了ICallbackMessageBase.
所以我想做点什么 var callback = myCallback as GenericCallbackClass<ICallbackMessageBase>
看来我不能做这个演员...有什么想法我应该绕过这个吗?
<T>在这种情况下,为什么你需要Generic .您的GenericCallback类中是否有其他代码可以利用<T>.否则,您可以依赖每个对象的接口实现,并确保接口定义您在Callback类中可能需要的任何公共属性或操作.
public class SomeBaseClass
{
public SomeBaseClass (string activeId)
{
//Persist activeId
}
}
public interface ICallbackMessageBase { /* implementation */ }
public class Foo : ICallbackMessageBase { /* implementation */ }
internal sealed class GenericCallbackClass : SomeBaseClass
{
public GenericCallbackClass(string activeId, ICallbackMessageBase message)
: base(activeId)
{
Message = message;
}
public ICallbackMessageBase Message { get; private set; }
}
void Main()
{
var specific = new GenericCallbackClass("foo", new Foo());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |