gpt4 book ai didi

c# - 具有通用接口(interface)的通用方法

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

我正在尝试创建一个类型为通用接口(interface)的通用方法。

private void ShowView<T>(string viewName) where T : IView<Screen>
{
IRegion mainRegion = _regionManager.Regions[RegionNames.MainRegion];
T view = (T)mainRegion.GetView(viewName);
if (view == null)
{
view = _container.Resolve<T>();
mainRegion.Add(view, viewName);
}
mainRegion.Activate(view);
view.LoadData();
view.ViewModel.IsActive = true;
}

接口(interface)是IView<T> where T : Screen .

所以我有ConcreteView : IView<ConcreteViewModel>ConcreteViewModel : Screen其中 Screen 是基类。当我尝试做 ShowView<ConcreteView>("concrete");我收到 UnknownMethod 错误。

是因为 ConcreteView 使用 ConcreteViewModel 而不是 Screen 作为它的 IView 实现吗?有没有办法重写该方法以使其有效?

最佳答案

IView<ConcreteViewModel>不是 IView<Screen>不为接口(interface)提供变化

interface IView<out T>
{
}

(以上可以从 C# 4.0 开始完成)

否则,你应该可以像下面这样写你的方法签名

void ShowView<T, U>(string viewName) where T : IView<U> where U : Screen
{
// code
}

并像ShowView<ConcreteView, ConcreteViewModel>("blah"); 一样调用它

关于c# - 具有通用接口(interface)的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7611860/

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