Возможно ли сделать общий контроль в .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>
{}
Ключ к работе дизайнера заключается в том, что базовый класс редактируемого класса не должен быть общим.
Ответ 2
Да. возможно. См. Ссылку ниже, чтобы получить представление.
http://www.hackersbasement.com/csharp/post/2009/08/29/Generic-Control-Builder-in-ASPNet.aspx
Ответ 3
Для одного, хотя общие методы управления доступны в .NET, разработчики Visual Studio не поддерживают их, поэтому вы сами по себе, если хотите их использовать. Вам придется создавать их сами в своем коде и выполнять макет тоже.
Что касается ошибки, о которой вы говорите, это звучит для меня так, как будто вы смотрите в неправильном направлении. Возможно, вы могли бы написать здесь весь текст ошибки?
Ответ 4
.NET Framework поддерживает их, но, как и в случае с Vilx, дизайнеры просто этого не делают - и любая из платформ xml/markup (xaml (wpf) или ASP.NET) вообще не понравится генерикам. Поэтому лучший совет: не используйте их.
Общий компромисс состоит в том, чтобы иметь свойство Type
(или свойство шаблона object
, на которое вы вызываете GetType()
)), и просто вставлять и т.д. внутри элемента управления. Аналогично, такое использование обычно использует такие вещи, как Activator.CreateInstance
и TypeDescriptor
(для поиска метаданных и т.д.).