none
关于实例化类的问题 RRS feed

  • 问题

  • 比如我现在有这样一个结构


    1.接口
     public interface aa
    { string a1(query_class query);}

    2.类1

    public class test1:Interface_Layer.aa
    {
       public string a1(query_class query)
       {......}
    }

    3.类2

    public class test2:Interface_Layer.aa
    {
       public string a1(query_class query)
       {......}
    }


    我现在想实现功能:

    在具体类中输入字符串“test1”程序就会自动实例化“类1”,输入字符串“test2"就会实例化“类2”

    不要用if判断在去实例化这个我知道,我看委托可以在方法里面自动找,能不能用委托自动化实例化呢?

    2011年12月29日 9:34

答案

  • 反射可以.
    Assembly aby = Assembly.GetAssembly(type)
    String s="Test1";//带命名空间
    aby.CreateInstance(s);
    委托只是方法的引用.没听说可以实例化类的功能.

    public delegate void PrintMsg(String s);
    
    public void OutPrint(String message)
    {
          System.Console.WriteLine(message);
    }
    
    PrintMsg pMsg=OutPrint;
    
    pMsg("Hi!   XXX");
    

     


    GetZ 不抛弃,不放弃.
    2011年12月29日 10:40

全部回复

  • 反射可以.
    Assembly aby = Assembly.GetAssembly(type)
    String s="Test1";//带命名空间
    aby.CreateInstance(s);
    委托只是方法的引用.没听说可以实例化类的功能.

    public delegate void PrintMsg(String s);
    
    public void OutPrint(String message)
    {
          System.Console.WriteLine(message);
    }
    
    PrintMsg pMsg=OutPrint;
    
    pMsg("Hi!   XXX");
    

     


    GetZ 不抛弃,不放弃.
    2011年12月29日 10:40
  • 用委托也是可以的,不过要基于表达式树

           public static object CreateInstance(string typeName)
            {
                System.Linq.Expressions.NewExpression expression=  System.Linq.Expressions.Expression.New(Type.GetType(typeName));
                System.Linq.Expressions.Expression<Func<object>> func = System.Linq.Expressions.Expression.Lambda<Func<object>>(expression);
                return func.Compile().Invoke();
            }

    2012年1月3日 1:56
    版主