class Program
    {
        private string str = "str";
        private int i = 0;
        static void ConvertString(string str)
        {
            str = "str has convert";
        }
        static void ConvertString(ref string str)
        {
            str = "str has convert";
        }
        static void ConvertString(Program c)
        {
            c.str = "str has convert";
        }
        static void Add(int i)
        {
            i++;
        }
        static void Add(Program c)
        {
            c.i++;
        }        static void Main(string[] args)
        {
            string str = "strTmp";
            int i = 20;
            Program c = new Program();
            Add(i);
            Add(c);
            Console.WriteLine(i);
            Console.WriteLine(c.i);
            ConvertString(str);
            Console.WriteLine(str);
            ConvertString(ref str);
            Console.WriteLine(str);
            ConvertString(c);
            Console.WriteLine(c.str);
            Console.Read();
        }
    }说下他的运行结果,别忘了说下理由哦

解决方案 »

  1.   

    20
    1
    strTmp
    str has convert
    str has convert奖品拿来:)
      

  2.   

    ConvertString(string str)  // 虽说是按引用传递,但传的是引用的副本static void ConvertString(ref string str) // 传引用本身,这才是真正的 C/C++ 意义上的指针传递
      

  3.   

    string str = "strTmp";
    int i = 20;
    Program c = new Program();
    Add(i); //按值传递值类型,增加的i是Add里的局部变量i,和Main函数里的i无关
    Add(c);//按值传递引用类型 增加的c和Main函数里的c指向同一对象,所以一改都改
    Console.WriteLine(i);
    Console.WriteLine(c.i);
    ConvertString(str); // 传递的是引用的副本
    Console.WriteLine(str);
    ConvertString(ref str);// 传递引用本身
    Console.WriteLine(str);
    ConvertString(c);
    Console.WriteLine(c.str);
    Console.Read();
      

  4.   

    Console.WriteLine(i);//输出20  --(同名变量,优先使用当前级别声明的)Console.WriteLine(c.i);//输出0 --(实例c的i,初时值是0)
    ConvertString(str);
    Console.WriteLine(str);//输出strTmp --(传值参数,不改变原值)
    ConvertString(ref str);
    Console.WriteLine(str);//输出str has convert --(传引用,对原值修改)
    ConvertString(c);
    Console.WriteLine(c.str);//输出str(传值,不改变原值,对象c的str初始值是str)