我想实现一个通用方法,该方法应该创建双通用对象的实例。应实例化的此类的泛型类型是第一个类型必须实现的另一个类和接口。CS0311当我在泛型方法中使用其泛型类型调用 new 时,即使我将类型正确限制为基本接口,也会出现编译器错误。为什么我不能创建这样的实例?class Program{ static void Main(string[] args) { GetQuery<ITESTEntity>(); } static void GetQuery<I>() where I : IEntityBase { var qry = new myQuery<TESTEntity, I>(); }}class myQuery<T, I> where T : class, I where I : IEntityBase{}
1 回答
撒科打诨
TA贡献1934条经验 获得超2个赞
假设您有这些定义:
interface IEntityBase { }
interface ITESTEntity : IEntityBase { }
class TESTEntity : ITESTEntity { }
那么你的问题就出自这里:
class myQuery<T, I>
where T : class, I
where I : IEntityBase
您声明T必须可分配给I,并且I必须可分配给IEntityBase。没关系,但是这里:
static void GetQuery<I>() where I : IEntityBase
{
var qry = new myQuery<TESTEntity, I>();
您接受任何I可分配给 的内容IEntityBase。所以你也可以这样称呼它:
interface ITESTEntity2 : IEntityBase { }
class TESTEntity2 : ITESTEntity2 { }
GetQuery<ITESTEntity2>();
此调用是有效的,但现在在您的方法中GetQuery():
new myQuery<TESTEntity, I>();
I将是ITESTEntity2,TESTEntity不可分配给它。不能保证 可以TESTEntity分配给任何可分配给 的I位置,如上面使用 演示的那样。IIEntityBaseITESTEntity2
所以重新考虑你的设计。
- 1 回答
- 0 关注
- 116 浏览
添加回答
举报
0/150
提交
取消