我声明了以下Generic usercontrol:
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();
}
}
如何在C#中创建通用用户控件?
答案 0 :(得分:16)
试试这个
public partial class MessageControl : MessageControlBase
{
public MessageControl()
{
InitializeComponent();
}
}
public class MessageControlBase : MessageBase<Post>
{}
让设计人员工作的关键是你正在编辑的类的基类不能是通用的。
答案 1 :(得分:2)
是。这是可能的。请参阅以下链接以了解相关信息。
答案 2 :(得分:1)
首先,虽然在.NET下可以使用通用控件,但Visual Studio设计人员不支持它们,所以如果你想使用它们,你就可以自己动手了。您必须在代码中自己实例化它们并执行布局。
至于你提到的错误,听起来像是你正朝错误的方向看。也许你可以在这里写出整个错误文本?
答案 3 :(得分:1)
.NET框架支持它们,但是作为Vilx提及,设计者根本不支持 - 任何基于xml /标记的平台(xaml(wpf)或ASP.NET)都不会喜欢泛型。所以最好的建议是:不要使用它们。
一个常见的折衷方案是拥有一个Type
属性(或object
模板属性,您可以在其上调用GetType()
),并简单地在控件内投射等。同样,此类用法通常会使用Activator.CreateInstance
和TypeDescriptor
之类的内容(用于元数据查找等)。