Возможно ли сделать общий контроль в .NET 3.5?

У меня есть объявленный общий пользовательский контроль:

public partial class MessageBase<T> : UserControl
    {
        protected T myEntry;
        public MessageBase()
        {
            InitializeComponent();
        }
        public MessageBase(T newEntry)
        {
            InitializeComponent();
            myEntry = newEntry;
        }    
    }
}

Но компилятор не позволит мне это сделать:

public partial class MessageControl : MessageBase<Post>
{
    public MessageControl()
    {
        InitializeComponent();
    }
}

Как создать общий пользовательский элемент управления на С#?

Ответ 1

Попробуйте это

public partial class MessageControl : MessageControlBase
{    
    public MessageControl()    
    {
        InitializeComponent();    
    }
}

public class MessageControlBase : MessageBase<Post>
{}

Ключ к работе дизайнера заключается в том, что базовый класс редактируемого класса не должен быть общим.

Ответ 3

Для одного, хотя общие методы управления доступны в .NET, разработчики Visual Studio не поддерживают их, поэтому вы сами по себе, если хотите их использовать. Вам придется создавать их сами в своем коде и выполнять макет тоже.

Что касается ошибки, о которой вы говорите, это звучит для меня так, как будто вы смотрите в неправильном направлении. Возможно, вы могли бы написать здесь весь текст ошибки?

Ответ 4

.NET Framework поддерживает их, но, как и в случае с Vilx, дизайнеры просто этого не делают - и любая из платформ xml/markup (xaml (wpf) или ASP.NET) вообще не понравится генерикам. Поэтому лучший совет: не используйте их.

Общий компромисс состоит в том, чтобы иметь свойство Type (или свойство шаблона object, на которое вы вызываете GetType())), и просто вставлять и т.д. внутри элемента управления. Аналогично, такое использование обычно использует такие вещи, как Activator.CreateInstance и TypeDescriptor (для поиска метаданных и т.д.).