如何通过MyEvents函数实现pass TType值

本文关键字:pass TType 实现 函数 何通过 MyEvents | 更新日期: 2023-09-27 18:06:51

在此代码中显示MyEvents的一个错误。发生了什么?以及如何通过MyEvents函数实现传递TType值

public class MListBox : ListBox
{
    public Type TType { get; set; }
     public void LoadList()
    {
        MyEvents<TType , TType >.LoadList("getList").ForEach(w => this.Items.Add(w));
    }
}
public void main(string[] args)
{
  MListBox mb= new MListBox();
  mb.TType = typeof(STOCK);
  mb.LoadList();
}

 public static class MyEvents<T,M> where T : class where M : class
{
    public static M m;
    public static T t;
    public static List<objectCollection> LoadList(string _method)
    {
        m = Activator.CreateInstance<M>();
        MethodInfo method = typeof(M).GetMethod(_method);
        List<objectCollection> ret = (List<objectCollection>)method.Invoke(m, null);
        return ret;
    }
}
public class STOCK()
{
}

谢谢你,

如何通过MyEvents函数实现pass TType值

您正在进入泛型的世界。使用泛型类型参数T,您可以编写其他客户端代码可以使用的单个类,而不会产生运行时强制类型转换或装箱操作的成本或风险。

泛型类,如MListBox<T>,不能按原样使用,因为它不是真正的类型。因此,要使用MListBox<T>,必须通过在尖括号内指定类型参数来声明和实例化构造类型。

MListBox<YourClass> a = new MListBox<YourClass>();

其中YourClass是你想传入的类型参数

关于泛型的更多信息

http://msdn.microsoft.com/en-us/library/512aeb7t.aspx

    public class MListBox<T, M> : ListBox
        where T : class
        where M : class, new()
    {
        public void LoadList()
        {
            MyEvents<T, M>.LoadList("getList").ForEach(w => this.Items.Add(w));
        }
    }
    public void main(string[] args)
    {
        MListBox<object,STOCK> mb = new MListBox<object,STOCK>();
        mb.LoadList();
    }

    public static class MyEvents<T, M>
        where T : class
        where M : class, new()
    {
        public static M m;
        public static T t;
        public static List<T> LoadList(string _method)
        {
            m = new M();
            MethodInfo method = typeof(M).GetMethod(_method);
            List<T> ret = (List<T>)method.Invoke(m, null);
            return ret;
        }
    }
在xaml 中使用的

包装类

class StockListBox : MListBox<object,STOCK>
{
}

在xaml as中使用,其中local是您的命名空间

<local:StockListBox />