加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 具有通用接口的通用方法

发布时间:2020-12-16 01:47:48 所属栏目:百科 来源:网络整理
导读:我正在尝试创建一个泛型方法,其中类型是通用接口. private void ShowViewT(string viewName) where T : IViewScreen{ IRegion mainRegion = _regionManager.Regions[RegionNames.MainRegion]; T view = (T)mainRegion.GetView(viewName); if (view == null)
我正在尝试创建一个泛型方法,其中类型是通用接口.

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

接口是IView< T>.其中T:屏幕.

所以我有ConcreteView:IView< ConcreteViewModel>和ConcreteViewModel:Screen是基类的屏幕.当我尝试做ShowView< ConcreteView>(“具体”);我收到一个UnknownMethod错误.

是因为ConcreteView使用ConcreteViewModel代替Screen来实现它的IView吗?有没有办法重写方法,以便它的工作原理?

解决方法

IVIEW< ConcreteViewModel>不是IView< Screen>不提供接口的差异

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”)一样调用它;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读