【发布时间】:2010-12-22 21:35:46
【问题描述】:
我很想说这个问题与我的一般架构有关,但无论哪种方式,作为示例显示可能比描述起来更容易。
public class AppUserBase
{
}
public class AppUserAbc : AppUserBase
{
}
public class ManagerBase<T> where T : AppUserBase
{
protected AppUserCollection<T> _users = new AppUserCollection<T>();
}
public class ManagerAbc : ManagerBase<AppUserAbc>
{
}
public static class Program
{
public static void Main()
{
ManagerAbc x = new ManagerAbc();
DoSomething(x); //fails
}
public static void DoSomething<M,U>(ManagerBase<AppUserBase> manager) where M : ManagerBase<U> where U : AppUserBase
{
//do something!
}
}
我希望我正在尝试做的事情很容易看到,我应该做的事情更容易向我解释:-)。
【问题讨论】:
-
这段代码甚至无法编译。您的代码中没有 Manager 类。它给你的错误是什么?它是编译时还是运行时?我们需要更多信息,克里斯。
-
还有,C# 3.0 还是 4.0? 4.0 具有更好的协方差/逆变支持,这可能是这里的一个因素。
-
对不起,它应该是 ManagerBase 而不是 Manager。我已经修改了帖子。另外,C# 4.0
标签: c# design-patterns generics inheritance