一般WinForms的层次结构
我有一个以下形式的等级制度:一般WinForms的层次结构,winforms,visual-studio-2010,generics,Winforms,Visual Studio 2010,Generics,我有一个以下形式的等级制度: class EditForm<T> : Form { } class ConcreteForm : ConcreteFormDesignable { } class ConcreteFormDesignable : EditForm<int> { } class AdvEditForm<T> : EditForm<T> { } // <-- ??? class AdvConcreteForm : AdvCo
class EditForm<T> : Form { }
class ConcreteForm : ConcreteFormDesignable { }
class ConcreteFormDesignable : EditForm<int> { }
class AdvEditForm<T> : EditForm<T> { } // <-- ???
class AdvConcreteForm : AdvConcreteFormDesignable { }
class AdvConcreteFormDesignable : AdvEditForm<int> { }
AdvEditForm.cs:
public partial class NonGenericAdvEditForm : AdvEditForm<Object> { }
public class AdvEditForm<T> : EditForm<T> { }
您可以添加非泛型类,仅用于
设计
目的
class NonGenericAdvEditForm : AdvEditForm<ConcreteType>
{
}
类非通用AdvEditForm:AdvEditForm
{
}
设计器需要具体的类,如
AdvEditForm
或AdvEditForm
。如果不指定T是什么,则无法实例化AdvEditForm
。指定具体T的方法是创建一个具体的非泛型类。我找到的唯一解决方案是:
// 1 Uncomment for design
//public partial class EntityListViewWithEditor<TEntity> : EntityListViewDesignable
// 2 Uncomment for compilation
public partial class EntityListViewWithEditor<TEntity> : EntityListView<TEntity>
where TEntity : XPBaseObject
{ }
// 1 Uncomment for design
//public class EntityListViewDesignable : EntityListView<XPBaseObject> { }
//1取消设计注释
//公共分部类EntityListViewWithEditor:EntityListViewDesignable
//2为编译取消注释
公共分部类EntityListViewWithEditor:EntityListView
其中tenty:XPBaseObject
{ }
//1取消对设计的注释
//公共类EntityListViewDesignable:EntityListView{}
这是一个很好的解决方案谢谢。。。但我不明白我应该从哪个阶级继承。。。(见我问题中的编辑)对不起,我不太明白。你能退一步解释一下为什么你需要通用表格,以及你将如何使用它吗?帮助您的是了解您所期望的是什么,以及您希望如何实例化表单(用法)。有一个带有网格和功能区控件的通用编辑表单(EditForm)。它显示一个实体(类型为T,XPBaseObject的子类)列表,并允许编辑这些实体、删除选定的实体、从数据源重新加载它们以及保存更改。它仅支持在位实体编辑。现在我需要扩展EditForm(我们称之为子类表单AdvEditForm)。我想向ribbon控件添加一个EditEntityButton,它将为每个实体显示一个弹出式编辑表单。我还需要一个CreateEntityButton。我还想更改一些网格控件属性。我将从EditForm和AdvEditForm中为真实编辑表单(具体实体类型)创建子类。。。我将实例化这些非泛型子类。隐马尔可夫模型。。。但是,实例化泛型表单EditForm将是一个有趣的事情……唯一的链接是因为它本身是毫无意义的,而且目标资源也不能保证在将来仍然存在。在这里包括答案的基本部分,并提供链接供参考。
class NonGenericAdvEditForm : AdvEditForm<ConcreteType>
{
}
// 1 Uncomment for design
//public partial class EntityListViewWithEditor<TEntity> : EntityListViewDesignable
// 2 Uncomment for compilation
public partial class EntityListViewWithEditor<TEntity> : EntityListView<TEntity>
where TEntity : XPBaseObject
{ }
// 1 Uncomment for design
//public class EntityListViewDesignable : EntityListView<XPBaseObject> { }