public interface IFillAreas { void FillAreas(string ids, string names); //接口中定义方法签名 }
public partial class FrmPerson : Form,interfaces.IFillAreas //窗体继承于接
private void btnChoice_Click(object sender, EventArgs e) { FrmAreas frm = new FrmAreas((interfaces.IFillAreas)this); //将窗体强转为接口类型,进行传递 frm.ShowDialog(); } public void FillAreas(string ids, string names) //接口方法的具体实现 { this.txtDistrict.Text = names; this.txtDistrict.Tag = ids; }
interfaces.IFillAreas Ifrm; //定义一个接口类型 public FrmAreas(interfaces.IFillAreas Ifrm) //次窗体构造函数接受主窗体传回的接口类型的窗体 { InitializeComponent(); this.Ifrm = Ifrm; }
Ifrm.FillAreas(aids.ToString().Substring(0, aids.Length - 1), anames.ToString().Substring(0, anames.Length - 1)); //调用主窗体的方法
此方法的好处在于实现了多态,次窗体接受主窗体传回的接口类型窗体,从而只能调用接口方法,而保护了原主窗体的公有成员。
缺点在于本质还是一个窗体,所以还是可以将接口类型窗体强转为窗体,从而调用窗体的公有成员。