【发布时间】:2012-10-31 23:38:38
【问题描述】:
我正在尝试创建一个基本的Windows Forms 表单,该表单包含通用功能和控件-但还包含对需要其方法类型的类的引用。每个表单将代表不同的类型,所以我认为我可以按照以下方式做一些事情:
public partial class Base<T> : Form where T : BaseClass
{
private GenericHandler handler = new GenericHandler();
}
public class BaseClass { }
public class GenericHandler
{
public void DoSomethingWithInstance<T>(T instance) where T : BaseClass
{
}
}
我的设计师类声明也反映了我的表单所具有的内容。现在,当我执行代表Foo 类型的第二个表单时,我无法访问设计器,因为我收到此错误:
无法显示此文件的设计器,因为没有 可以设计其中的类。设计师检查了 文件中的以下类: Foo --- 基类 无法加载“WindowsFormsApplication1.Base”。确保 程序集已被引用,并且所有项目都已构建。
FooClass --- 基类 'WindowsFormsApplication1.BaseClass' 无法设计。
public partial class Foo : Base<FooClass>
{
public Foo()
{
InitializeComponent();
}
}
public class FooClass : BaseClass { }
为什么会发生这种情况/我做错了什么或有任何其他方法可以做到这一点?
【问题讨论】:
-
不是解释,但请注意,您可以(而且我确实)通过没有泛型基类,但通过拥有本身派生自泛型类的中间基类来解决此问题:@ 987654327@,
FooBase : Base<FooClass>。FooBase的定义中除了它的基数之外,什么都没有。 -
@hvd 这是一种享受。我会接受它作为答案,但这是一个评论。
-
我将其作为评论发布,因为它没有回答您提出的问题;我觉得你不应该接受。即使你问的问题对你来说可能不再重要:)
-
背景资料(Visual Studio 杂志):Tap the Power of Inherited WinForms
-
这个特殊问题可能在 Is visual inheritance supported by WinForms Designer in MVS 2008 for C++/CLI? 的 answers 中有所涉及(在通用事物之间插入一个类和你的班级)。
标签: c# winforms inheritance