gpt4 book ai didi

c# - 通用类型的转换

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:51 26 4
gpt4 key购买 nike

我有以下类结构:

public class FirstContextController : AFirstContextController

public abstract class AFirstContextController : ABaseController<AFirstContextView>

public abstract class ABaseController<TView> where TView : ABaseView

public abstract class AFirstContextView : ABaseContextView

public abstract class ABaseContextView : ABaseView

public abstract class ABaseView : UserControl

现在我创建一个 Controller 实例:

AFirstContextController firstContextController = new FirstContextController();

并且需要从方法中返回它:

public static ABaseController<ABaseContextView> GetContextController( ... )
{
return firstContextController;
}

但是我得到一个错误:

无法将类型“AFirstContextController”隐式转换为“ABaseController

所以我尝试了很多类型转换(例如):

return (ABaseController<AFirstContextView>)firstContextController;

return (ABaseController<ABaseContextView>)( (ABaseController<AFirstContextView>)firstContextController );

但是根据转换还是会出现类似的错误。那么我应该应用什么转换来返回它?

最佳答案

您需要一个派生自 ABaseController<ABaseContextView> 的接口(interface)使其发挥作用。

这与方差和协方差有关。在 MSDN: Covariance and Contravariance in Generics 上了解更多信息.

您必须标记 ABaseContextViewout在您的接口(interface)定义中,因此签名应该类似于 IBaseController<out ABaseContextView> .

例子:

public abstract class ABaseController<TView> : IBaseController<TView> where TView : ABaseView
{
public void SomeMethod() { }
}

界面:

public interface IBaseController<out TView> where TView : ABaseView
{
void SomeMethod();
}

那么你当前的方法应该是:

public static IBaseController<ABaseContextView> GetContextController( ... )
{
return firstContextController;
}

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

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