接口多态实现窗体传递

    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));   //调用主窗体的方法

此方法的好处在于实现了多态,次窗体接受主窗体传回的接口类型窗体,从而只能调用接口方法,而保护了原主窗体的公有成员。

缺点在于本质还是一个窗体,所以还是可以将接口类型窗体强转为窗体,从而调用窗体的公有成员。

原文地址:https://www.cnblogs.com/ianism/p/4245813.html