C # Форма наследования и общие ограничения - PullRequest
1 голос
/ 06 августа 2010

Я работаю с .NET Compact Framework и только начал проводить рефакторинг некоторого кода пользовательского интерфейса. Я определяю базовый пользовательский элемент управления для инкапсуляции общих функций, проект компилируется нормально, но когда я пытаюсь открыть дочерний пользовательский элемент управления в режиме разработки, я получаю сообщение об ошибке.

Я создал иерархию классов с учетом этого вопроса . Мои занятия такие:

//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 Ответ

1 голос
/ 06 августа 2010

Это должно быть проблемой неоднозначности, компилятор видит другое определение IDataObject при компиляции FooUserControl. Что легко сделать, пространство имен System.Windows.Forms уже имеет интерфейс IDataObject.

Выберите другое имя или введите полное имя пространства имен.

...