是否可以在.Net 3.5中进行通用控制?

我声明了以下Generic usercontrol:

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

但编译器不允许我这样做:

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

如何在C#中创建通用用户控件?

试试这个

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

让设计人员工作的关键是你正在编辑的类的基类不能是通用的。

首先,虽然在.NET下可以使用通用控件,但Visual Studio设计者不支持它们,所以如果你想使用它们,你就可以独立完成。 您必须在代码中自己实例化它们并执行布局。

至于你提到的错误,听起来就像你在寻找错误的方向。 也许你可以在这里写出整个错误文本?

.NET框架支持它们,但是作为Vilx提及,设计者根本不支持 – 任何基于xml /标记的平台(xaml(wpf)或ASP.NET)都不会喜欢generics。 所以最好的建议是:不要使用它们。

一个常见的折衷方案是使用Type属性(或调用GetType()object模板属性),并在控件内部简单地转换等。 同样,这种用法通常会使用Activator.CreateInstanceTypeDescriptor (用于元数据查找等)。