【发布时间】:2011-06-09 05:26:38
【问题描述】:
我试图在 WinForms 应用程序中实现与 ASP.NET 中的主窗体类似的效果。我最初的想法是创建一个基本表单并将其声明为抽象,但编译器似乎不允许我这样做。
public abstract partial class Master : Form
{
public Master()
{
InitializeComponent();
}
}
所以我有两个问题:
- 为什么编译器不允许我这样做?我是使用了错误的语法还是这是一个真正的限制。
- 谁能提出解决方法或更好的方法来做到这一点?
编辑:
初始化组件代码:
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
this.mainMenu1 = new System.Windows.Forms.MainMenu();
this.Menu = this.mainMenu1;
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.Text = "Master";
this.AutoScroll = true;
}
编辑:
错误如下:
The designer must create an instance of type 'Namespace.Master' but it cannot because the type is declared as abstract.
【问题讨论】:
-
实际的编译器错误是什么?
-
如果这正是您尝试编译的 sn-p,您需要提供 InitializeComponent() 的定义
-
也许是 resharper 或抱怨抽象类中的公共构造函数的东西?
-
标记基本表单类
abstract时,视觉继承将不起作用。设计者必须能够初始化该类型的对象,并且不能初始化抽象类。但这不应该导致 compiler 错误。 -
我添加了一个编辑来指示实际的错误消息。我的印象是第一个问题的答案是这是一个真正的限制。除了将主表单创建为非抽象表单之外,任何人都可以提出另一种方法吗?
标签: c# winforms .net-3.5 compact-framework