gpt4 book ai didi

c# - 使用通用类型进行转换

转载 作者:太空狗 更新时间:2023-10-30 00:54:34 25 4
gpt4 key购买 nike

我很确定有一个围绕协方差的简单答案,但我很难看到它!

我有这样一个类:

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,并实例化一个新的 GenericCallbackClass,将其作为 T 的参数传入例如var myCallback = new GenericCallback<Foo>("SomeID", new Foo())

我现在想将它转换为更通用的 GenericCallbackClass 实例,因为我将有许多 Foo、Bar 等实例,但都实现了 ICallbackMessageBase。

所以我想做类似 var callback = myCallback as GenericCallbackClass<ICallbackMessageBase> 的事情

看来我不能做这个 Actor ...我应该如何解决这个问题?

最佳答案

为什么需要通用 <T>根本就在这种情况下。在您的 GenericCallback 类中是否有一些其他代码利用了 <T> .否则,您可以只依赖每个对象的接口(interface)实现,并确保该接口(interface)定义了您在回调类中可能需要的任何通用属性或操作。

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());
}

关于c# - 使用通用类型进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12386386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com