如何加载从表单和界面扩展的 class?

How to load a class which extended from a form and interface?

我有几个表单 class 扩展了基于表单和我的自定义界面。

Interface InterfaceForms{
      void InterfaceFunc1();
}



public partial class child1 : Form, InterfaceForms
    {
      public child1(){}
      public InterfaceFunc1(){}
    }

public partial class child2 : Form, InterfaceForms
    {
      public child2(){}
      public InterfaceFunc1(){}
    }

我将所有表单 classes 对象添加到如下列表中:

 List<Form> lsf = new List<Form>();

然后我尝试加载我的表单 classes,如下所示:

 var fr = from Form item in lsf
                         where item.Name == "child1"
                         select item;
Form frm = (Form)fr;

现在,我的问题是无法访问 InterfaceFunc1()。

你介意告诉我如何实现吗?请注意,frm 类型可能每次都不同(child1、child2 等),但它们都是从 Form 和 InterfaceForm 扩展而来的。

您需要将其转换为 InterfaceForms:

var fr = from Form item in lsf
                         where item.Name == "child1"
                         select item;
Form frm = (Form)fr;
var iFaceFrm = frm as InterfaceForms;

if (iFaceFrm != null)
{
    //use the iFaceFrm or frm here
}

编辑

你的 LINQ 语句的问题是声明类型,LINQ 语句的类型是推断出来的,所以你不要把它放在 select:

var fr = from item in lsf
         where item.Name == "child1"
         select item;

或者,如果您想按程序执行此操作:

var fr = lsf.Where(f => f.Name == "child1").FirstOrDefault();