我想定义以下控制:
public partial class ObjectSelectorControl<T> : UserControl where T : class
问题是,设计者无法解决这个问题。 有一种解决方法这个问题?
我想定义以下控制:
public partial class ObjectSelectorControl<T> : UserControl where T : class
问题是,设计者无法解决这个问题。 有一种解决方法这个问题?
这工作
public class Control1<T> : UserControl { ... }
public class Control2 : Control1<double> { ... }
public class Control3 : Control2 { ... }
曾在这里阅读:
一般用户控件?
听起来很像是我们在我们的项目做。
有一个基类是通用的:
public partial class controlItemList<TBaseItem, TBaseItemCollection> : UserControl, IUIDispatcher
where TBaseItem : new()
where TBaseItemCollection : IItemCollection<TBaseItem>
然后,每次使用我们定义了一个非通用版本(这仍然无法设计者使用):
public class controlMessagesNonGenericParent : controlItemList<MailItem, MailItemCollection>
{
}
...并可能在设计者使用,那么我们还派生的控件:
public partial class controlMessages : controlMessagesNonGenericParent
{
...
}
有什么你可以控制或不能为了做才能够使用设计一些限制。 从根本上说,他们都围绕设计师能够实例化类(必须有一个参数的构造函数,不能是abstract
,等等)。 因为设计师不知道通过作为一般的参数是什么类型(我怀疑这是一个即使考虑),你的类不能被实例化。
你最希望的是创建你的UserControl
和更改构造函数来protected
(此,笔者认为,将工作,因为设计师使用了反射,而忽略知名度,但我不是100%肯定的)。 然后,您可以从继承UserControl
和创建泛型类和调用基( protected
)构造函数。
我不相信这是可能的,因为设计者调用您的类的实例。 如果您使用泛型,设计师不知道进入“T”是什么类型。
https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=105876
该错误已被发布到微软的网站,你可以看到,其标记为“延期”目前还没有解决! 。
用的组合物,而不是仿制药。 代替使用ObjectSelectorControl的,得到另一种类型的(一个通用部件Selector<T>
也许)和作用到该对象,而不是试图强迫自己是通用上。
我不知道在这一点(与C#/。NET / VS verison更新),但现在它可以创建通用的控制您创建的任何其他通用类的方法相同。
如果您创建UserControl
在VS的标准方式(通过GUI将其添加IE),只需添加<T>
类声明(“基地”类代码和设计管理的文件)的两个部分。 其实,那是你在你的报价代码。