如:
public class ClassA
{
  public void func1( ref int j )
  {
    j++ ;
  }  
}
public class ClassB
{
  public void func2()
  {
     int j ;
     ClassA A = new ClassA() ;
     Type tpClass = A.GetType() ;
     MethodInfo miMethod = tpClass.GetMethod( "func1" ) ;
     miMethod.Invoke( A , new object[]{j} ) ;  //这里这样调用的话,返回的j并没有作相应 的改变,没有达到ref的效果;如果写成ref j的话又有错误,该怎么写啊。
  }
}

解决方案 »

  1.   

    public void func2()
    {
        int j = 0;
        ClassA A = new ClassA();
        type tpClass = A.GetType();
        MethodInfo miMethod = tpClass.GetMethod("func1");    // 注意下面两行的改动
        object[] args = new object[] { j };
        miMethod.Invoke(A, args);
    }
      

  2.   

    new object[]{j}
    这有什么用啊?!像这样来做      int j = 10;
          object[] args = new object[1];
          args[0] = j;
          ClassA A = new ClassA() ;
          Type tpClass = A.GetType() ;
          MethodInfo miMethod = tpClass.GetMethod( "func1" ) ;
          miMethod.Invoke( A , args) ;        Console.WriteLine(ars[0]);
      

  3.   

    主要的原因是改变后的值还在object[]里面,而不是直接作用到变量j