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

标签 c# generics

我正在尝试创建一个类型为通用接口(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/

相关文章:

c# - 有关管理 Azure 网站部署/备份/日志的指南

c# - 简单插入,更新到 SQL Server

c# - 如何修复 CA2100 Review SQL 查询的安全漏洞问题

c# - 为什么我的操作没有在 ASP.NET MVC 4 Web 应用程序中被调用?

java - Java 中的有界通配符

c# - 将 visual studio express 2010 项目中的所有源代码提取到单个文件中?

java - 两种类型的通用类

.net - 对象不为空的排序列表

java - Java 中的泛型和通配符

java - 类型删除和桥接方法