Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一般WinForms的层次结构_Winforms_Visual Studio 2010_Generics - Fatal编程技术网

一般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> { }