C# 具有泛型接口的泛型方法
我试图创建一个泛型方法,其中类型是泛型接口C# 具有泛型接口的泛型方法,c#,generics,C#,Generics,我试图创建一个泛型方法,其中类型是泛型接口 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) {
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;
}
private void ShowView(字符串视图名),其中T:IView
{
IRegion mainRegion=_regionManager.Regions[RegionNames.mainRegion];
T view=(T)mainRegion.GetView(viewName);
如果(视图==null)
{
视图=_container.Resolve();
添加(视图、视图名称);
}
主区域。激活(视图);
view.LoadData();
view.ViewModel.IsActive=true;
}
界面为IView,其中T:Screen
所以我有ConcreteView:IView
和ConcreteView模型:Screen
其中Screen是基类。当我试着做ShowView(“混凝土”)代码>我得到一个未知方法错误
是因为ConcreteView使用ConcreteViewModel而不是Screen来实现IView吗?有没有一种方法可以重写该方法以使其正常工作?IView
不是一个IView
,而不会给接口带来差异
interface IView<out T>
{
}
interface-IView
{
}
(可以从C#4.0开始执行上述操作)
否则,您应该能够像下面这样编写您的方法签名
void ShowView<T, U>(string viewName) where T : IView<U> where U : Screen
{
// code
}
void ShowView(string viewName)其中T:IView其中U:Screen
{
//代码
}
并像ShowView(“废话”)一样调用它代码>这是因为每个通用接口都被视为不同的接口。因为.NET4.0协方差是可能的,所以您可以使用out语句.OK。我在没有指定
的情况下尝试了它,并且不断出现错误。谢谢…这就是我错过的。