如何通过MyEvents函数实现传递TType值

时间:2014-06-04 09:47:59

标签: c# .net wpf c#-3.0

此代码中显示了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()
{
}

谢谢,

1 个答案:

答案 0 :(得分:1)

你正在深入研究仿制药的世界。使用泛型类型参数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中使用,其中local是你的namesapce

<local:StockListBox />