日期:2014-05-17  浏览次数:20943 次

关于C#中方法参数传递的问题
在C#高级编程(第七版)写到方法中的参数默认是按照值类型传递的
引用
在 C# 中 ,除 非特别说明 ,所 有的参数都通过值来传递。 但是 ,在 理解引用类型的含义时需要注
意。因为引用类型的变量只包含对象的引用 ,将 要复制的正是这个引用 ,而 不是对象本身 ,所 以对
底层对象的修改会保留下来。相反 ,值 类型的对象包含的是实际数据 ,所 以传递给方法的是数据本
身的副本。例如 ,int 通过值传递给方法 ,对 应方法对该 int 的值所做的任何改变都没有改变原 血
对象的值。但如果把数组或其他引用类型(如类)传递给方法 ,对应的方法就会使用该引用改变这个
数组中的值。

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;
        }