gpt4 book ai didi

c# - 将实现转换为具有泛型类型的接口(interface)

转载 作者:行者123 更新时间:2023-11-30 16:50:12 25 4
gpt4 key购买 nike

我公司有一个共享库,里面有这样的代码

public interface IBaseService<TBaseUser> where TBaseUser : BaseUser
{
// snip
}

public class User : BaseUser
{
// snip
}

public class SomeService : IBaseService<User>
{

}

各种应用程序都使用此共享代码。我正在尝试编写一个接收 IBaseService<BaseUser> 的基本 Controller 在它的ctor中。

public class BaseController : Controller
{
public BaseController(IBaseService<BaseUser> service)
{
}
}

库级别的代码完全按照我的预期工作,但是当我尝试从消费应用程序中使用它并传入派生类型时,即 Service类型,它因无效转换而失败。

public class MyController : BaseController
{
public MyController(SomeService service) : base(service)
{
}
}

我想做的事可行吗?

最佳答案

你的 IBaseService -iterface 需要是 covariant :

interface IBaseService<out T> 

这样你就可以分配一个 IBaseService<User> 的实例至 IBaseService<BaseUser> .

关于c# - 将实现转换为具有泛型类型的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35406993/

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