c#中带有接口的继承窗口窗体

本文关键字:继承 窗口 窗体 接口 | 更新日期: 2023-09-27 18:12:10

我有一个基本的窗口窗体类,其中包含两个按钮:确定和取消。这个基本表单实现了接口IBaseForm:

public interface IBaseForm
{
  string FormText {get;set;}
  DialogResult ShowView(IWin32Window owner);
}
public partial class BaseForm : IBaseForm
{
  ...
}

接下来,我有一个窗口类,继承自BaseForm并实现另一个接口IItem:

public interface IItem : IBaseForm // here is problem
{
  string ItemName {get; set;}
  ...
}
public partial class AddItemForm : BaseForm, IItem
{
  ...
  // I don't have to implement IItem here, because it is implement in BaseForm
}

问题在于IBaseForm的继承;我必须继承它两次。在代码中:

IItem view = new AddItemForm();
view.FormText = "Add new item";

如果我删除IItem的继承,view.FormText将不可见。如果我从BaseForm中删除继承,我必须在每个AddItemForm中实现IBaseForm。我只展示了一个itemForm,但它很多,我必须实现它很多次。

如何解决这个问题?

c#中带有接口的继承窗口窗体

没有别的办法了。BaseForm是一个类,而IItem是一个不相关的接口。两者都不是另一个的'super'或'base',所以你需要在它们两个中继承IBaseForm。

我真的不明白这个问题;你写的代码编译和运行都很好。

AddItemForm继承了BaseFormIBaseForm的实现,所以不需要重新实现IBaseForm