C#表单继承和泛型约束

时间:2010-08-06 18:01:01

标签: c# generics inheritance forms constraints

我正在使用.NET Compact Framework,并开始重构一些UI代码。我正在定义一个基本用户控件来封装常用功能,项目编译好了,但是当我尝试在设计模式下打开子用户控件时,我收到错误。

我将我的班级层次结构考虑在内this question。我的课程是这样的:

//on the data layer..
interface IDataObject {}
class Foo: IDataObject {}

//on the UI layer i have
class BaseDataUserControl<TDataObject> : UserControl 
where TDataObject : IDataObject {}

class FooUserControl : BaseDataUserControl<Foo> {}

这是我得到的错误:

  

GenericArguments [0],'Foo','BaseDataUserControl`1 [TDataObject]'违反了'TDataObject'类型的约束

有人可以向我指出为什么这不起作用?

1 个答案:

答案 0 :(得分:1)

这必然是一个模糊问题,编译器在编译FooUserControl时会看到IDataObject的不同的定义。这很容易做到,System.Windows.Forms命名空间已经有了一个IDataObject接口。

选择其他名称或输入完整的命名空间名称。