在C#高级编程(第七版)写到方法中的参数默认是按照值类型传递的
c#(.net)框架中预定义15个类型其中13个是值类型,另外两个(string && object)是引用类型。
按照上述的结果是如果把string 和 object传递给方法在方法类改变这一值其外部的值会被改变。
测试代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ConsoleApplication1
{
    /// <summary>
    /// 论证方法的参数是否以引用传递。参数以值类型传递
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            string Test = "I Love You!";
            Program TestString = new Program();
            TestString.ChangeString(Test);
            Console.WriteLine(Test);//I Love You!
            int[] ints = { 0, 1, 2, 3 };
            TestString.ChangeArray(ints);
            Console.WriteLine(ints[0].ToString());
            Console.ReadKey();
        }
        public void ChangeString(string str)
        {
            str = "I heart you";
        }
        public void ChangeArray(int[] ints)
        {
            ints[0] = 100;
        }
    }
}
在我测试后string的值并没有改变而数组的值改变了。这是为什么。数组和string不一样是引用类型吗?

解决方案 »

  1.   

    楼主试试下面写法public void ChangeString(ref string str)
            {
                str = "I heart you";
            }
    调用时:
    TestString.ChangeString(ref Test);
      

  2.   

    你看看你写的那个语句,你那个test=i love you 那你下面传的值也是str=i love you str=i heart you
    这个值就改变的了,但是这只是个参数传过来的,你外面那个实参你确没有改变的,改变的只是形参,如果你在上面直接test=i heart you 那这个肯定是输出是i heart you !
      

  3.   

    string是引用类型,但比较特殊,难道你看书没有看到?
      

  4.   

    你只要这样记住就可以了,string是特殊的引用类型,所以他是例外的,不会被改变
      

  5.   

    值传递和引用传递你可以把string的传递 特殊当成值传递
      

  6.   


           public void ChangeArray(int[] ints)
            {
                ints = new int[]{100,1,2,3};
            }
    你试一下这个。
      

  7.   

    str = "I heart you";
    相当于: str = new string("I heart you");
      

  8.   

    string 是一个特殊的类型在于,string 一旦创建,不能再修改里面的值,要改变,只能从新创建。
    例如 string str="abc";
    你无法执行: str[1]='z';
    但你可以: char c1=str[1];