class CFirst
{
  public delegate string DelegateHandler(string str);
}
class CSecond
{
  public static string getStr(string str)
  {
    Console.WriteLine("传输如的是:" + str);
    return str;
  }
}
class CTest
{
  public static void Main()
  {
    CFirst.DelegateHandler dh = new CFirst.DelegateHandler(CSecond.getStr);    
    Console.WriteLine(dh("HelloWorld!"));
  }
}
上面委托初始化的部分CFirst.DelegateHandler dh = new CFirst.DelegateHandler(CSecond.getStr);    
我怎么样搞成
public string tempMethod(xxxx methodname,string str)  //XXXX代表CSecond.getStr传入的类型
{
  CFirst.DelegateHandler dh = new CFirst.DelegateHandler(methodname);    
  return dh(str);
}
我如何才能实现实例化委托的函数参数化呢?

解决方案 »

  1.   

    public   delegate   string   DelegateHandler(string   str); class   CSecond 

        public   static   string   getStr(string   str) 
        { 
            Console.WriteLine("传输如的是:"   +   str); 
            return   str; 
        } 

    class   CTest 

        public   static   void   Main() 
        { 
            DelegateHandler   dh   =   new   DelegateHandler(CSecond.getStr);         
            Console.WriteLine(dh("HelloWorld!")); 
        } 

            
    我怎么样搞成 
    public   string   tempMethod(DelegateHandler handler,string   str)     //XXXX代表CSecond.getStr传入的类型 

        if (handler != null)       
          return   handler(str); 
        return null;
      

  2.   

     
    class   CSecond 常{ 
        public   static   string   getStr(string   str) 
        { 
            Console.WriteLine("传输如的是:"   +   str); 
            return   str; 
        } 
    } public   string   tempMethod(string assembly, string type,  string   str)     //XXXX代表CSecond.getStr传入的类型 

       Assembly a = Assembly.LoadFrom(assembly);  
       Type FooType = a.GetType(type);  
       object foo = Activator.CreateInstance(FooType);  
           CFirst.DelegateHandler   dh   =   new   CFirst.DelegateHandler(foo.getStr);         
        return   dh(str); 
    }可一将class的名字参数化,但methodname是固定的,可是class里面的方法名也参数化可能就不行了. 
    名字也要参数化,就要用到reflection
    看看这个吧How to: Hook Up a Delegate Using Reflectionup
      

  3.   

    public       delegate       string       DelegateHandler<T>(T       str);   class       CSecond   
    {   
            public       static       string       getStr(string       str)   
            {   
                    Console.WriteLine("传输如的是:"       +       str);   
                    return       str;   
            }   
    }   
    class       CTest   
    {   
            public       static       void       Main()   
            {   
                    DelegateHandler<string>       dh       =       new       DelegateHandler<string>(CSecond.getStr);                   
                    Console.WriteLine(dh("HelloWorld!"));   
            }   
    }   
                    
    我怎么样搞成   
    public       string       tempMethod(DelegateHandler<string>   handler,string       str)           //XXXX代表CSecond.getStr传入的类型   
    {   
            if   (handler   !=   null)               
                return       handler(str);   
            return   null; 
    }