获取泛型类中的接口属性值

本文关键字:属性 接口 泛型类 获取 | 更新日期: 2023-09-27 18:18:35

我有这个接口

public interface IMyInterface
{
    IEnumerable<MyParamInfo> Params { get; }
}  

,MyParamInfo是

public class MyParamInfo 
    {
        public MyParamInfo (string name)
        {
            Name= name;
        }
        public string Name { get; private set; }
}

也这门课

public class MyClass:IMyInterface
{  
   //properties
   ....  
   public IEnumerable<MyParamInfo> Params
   {
      get
        {
         return new List<MyParamInfo> { new MyParamInfo("Param1")};
        }
   }
}

和this Form

public partial class MyForm<T> : Form where T:Class,IMyInterface
{
  ...
} 

的代码

MyForm<MyClass> frm = new MyForm<MyClass>();

我怎么能访问Params属性的MyClass从对象?

获取泛型类中的接口属性值

如果您还要求MyFormT类型参数具有无参数构造函数,您可以实例化T的实例,然后随意使用interface属性。

MyForm的定义上,添加new()泛型约束

public partial class MyForm<T> : Form where T : Class, IMyInterface, new()

然后在MyForm<T>的某些方法中,您可以使用:

(new T()).Params;

你可以在这里阅读关于c#类型参数的所有约束。

看起来你真正需要的是能够指定静态方法的接口(所谓的静态接口)。c#中不存在这样的结构。