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