我的项目中需要有多个表单类。所以正在考虑将这些形式的所有共同点放在抽象类中。此类将具有继承的 Form 类和一个接口(interface)。诸如此类:
public interface IMyForm
{
void Init();
}
public abstract class AMyForm : Form, IMyForm
{
void IBrowser.Init()
{
throw new NotImplementedException();
}
}
public partial class MainClass : AMyForm
{
// But here the warning is shown (That i have to add override keyword),
// but when i do, The error is shown that i cannot override from non abstract thing
public void Init()
{
}
}
你能告诉我如何实现吗?
最佳答案
虽然 Jon Skeets 的回答对于一般编程是正确的,但我建议反对在表单和用户控件上使用抽象类。第一个问题是,设计器无法创建抽象类的实例,因此无法在设计器中显示继承FROM 抽象窗体的窗体。这意味着您将无法通过设计器向窗体添加新控件,除非 - 正如下面评论中所建议的那样 - 您添加了一个实现抽象类的代理类,然后用作其他类的基础继承的形式,例如:AbstractMyForm -> MyFormSurrogate -> MyForm
。
在我看来,第二个也是更大的问题是,这意味着您正试图将逻辑固定在表单中。这通常是不希望的,尤其是当您最终将业务逻辑与显示技术耦合时,在本例中为 Winforms
。我的建议是尝试使用 Model View Presenter pattern在普通类中尽可能多地分离逻辑(使用抽象类、接口(interface)等)然后 data bind他们的形式。如果有共享的可视部分(例如:一组复选框),请为这些部分制作用户控件并在表单上重用它们。
我希望我没有过多地假设您对 winforms 的了解,但当我开始进行 GUI 开发时,我也遇到过类似的问题。
关于继承抽象类并实现接口(interface)的 C# 窗体。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11508199/