我是一名VC#的初学者,但是对值传递和引用传递还是很头疼,自己看书啊什么的,还是比较迷茫,到网上找了些资料,按着别人的代码敲出来,一步一步的调试看结果,但是还是没转过来......希望高手能为我指点迷津(我智商没有问题~~~~)谢谢各位了!!!!!!

解决方案 »

  1.   

    值类型源自System.ValueType,每个值类型的对象都有天一个独立的内存区域保存自己的值。只要在代码中修改它,就会在它的内存区域内保存这个值。
    引用类型源于System.Object,它存储的是对值的引用,就好比存储值的对象是一个气球,而我们的引用变量是一根线。值类型
    {
      int  long  float  char  bool  
      枚举enum
      结构 struck
    }引用类型
    {
      类:  基类System.Object
           字符串 string
           自定义类  class
      接口:interface
      数组:int[],string[]
    }
      

  2.   

    运行这个对你有帮助 ~_~!!
    using System;
    using System.Collections.Generic;
    using System.Text;namespace ConsoleApplication1
    {
        class Value
        {
            public int i = 15;
        }    class Program
        {        public void first()
            {
                Console.WriteLine("    first()\n    {");            Value v = new Value();
                Console.WriteLine("        Value v = new Value();  //此时 v.i = " + v.i);            v.i = 25;
                Console.WriteLine("        v.i = 25;  //此时 v.i = " + v.i);            Console.WriteLine("        second(v)  //执行该方法\n");
                second(v);
                Console.WriteLine("        //此时 v.i = " + v.i);
                Console.WriteLine("        second(ref v)  //执行该方法\n");
                second(ref v);            Console.WriteLine("        //此时 v.i = " + v.i);
                Console.WriteLine("    }");
            }        public void second(Value v)
            {
                Console.WriteLine("        second(Value v)\n        {");
                Console.WriteLine("            //参数Value v刚进入second方法时 v.i = " + v.i);            v.i = 20;
                Console.WriteLine("            v.i = 20;  //此时 v.i = " + v.i);            Value val = new Value();
                Console.WriteLine("            Value val = new Value();  //此时 val.i = " + val.i);            v = val;
                Console.WriteLine("            v = val;  //此时 v.i = " + v.i);
                Console.WriteLine("        }");
            }        public void second(ref Value v)
            {
                Console.WriteLine("        second(ref Value v)\n        {");
                Console.WriteLine("            //参数ref Value v刚进入second方法时 v.i = " + v.i);            v.i = 20;
                Console.WriteLine("            v.i = 20;  //此时 v.i = " + v.i);            Value val = new Value();
                Console.WriteLine("            Value val = new Value();  //此时 val.i = " + val.i);            v = val;
                Console.WriteLine("            v = val;  //此时 v.i = " + v.i);
                Console.WriteLine("        }");
            }        public void testValue(int i)
            {
                Console.WriteLine("    testValue(int i)\n    {");
                Console.WriteLine("        //i= " + i);
                i = 10;
                Console.WriteLine("        i = 10;  //i= " + i);
                Console.WriteLine("    }");
            }        public void testValue(ref int i)
            {
                Console.WriteLine("    testValue(ref int i)\n    {");
                Console.WriteLine("        //i= " + i);
                i = 20;
                Console.WriteLine("        i = 10;  //i= " + i);
                Console.WriteLine("    }");
            }                static void Main(string[] args)
            {
                Console.WriteLine("下面介绍当方法的参数为 值类型 或 类实例类型 时");
                Console.WriteLine("使用ref或不使用时的一些区别!");
                Console.WriteLine("Main()\n{");            Program t = new Program();
                Console.WriteLine("    Program t = new Program();");
                Console.WriteLine("    //下面演示方法参数为 类实例类型 的传递规则");            Console.WriteLine("    t.first();─────┐\n");
                t.first();
                Console.WriteLine("    ──────────┘");            int i = 30;
                Console.WriteLine("    int i = 30;  //i = " + i);            Console.WriteLine("    //下面演示方法参数为 值类型 的传递规则");            Console.WriteLine("    t.testValue(i); ──┐");
                t.testValue(i);
                Console.WriteLine("    i = " + i);
                Console.WriteLine("    ──────────┘");            Console.WriteLine("    t.testValue(ref i); ─┐");
                t.testValue(ref i);
                Console.WriteLine("    i = " + i);
                Console.WriteLine("    ───────────┘");            Console.WriteLine("}");
                Console.Read();
            }
        }
    }