C#引數傳遞之值引數

iamzxf發表於2015-04-07

    C#引數傳遞有四種:值引數,引用引數,輸出引數和陣列引數。這裡首先介紹一下值引數。值引數在處理時不需要任何修飾符,但引數型別有可能有兩種:一種是值型別,另一種是引用型別。

    (1)當用值引數向方法傳遞引數時,程式給實參在棧中儲存的內容做一份拷貝,並且將此拷貝傳遞給該方法,被呼叫的方法不會修飾實參的值,所以使用值引數時,可以保證實參的修士是安全的。

    (2)如果引數的型別是引用型別(例如,類),則拷貝中儲存的也是物件的引用,因此此時拷貝和實參指向的是堆中的同一個物件,通過這個拷貝,可以修改實參所引用的物件中的資料成員。如下面的例子。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Student
    {
        public string Name
        {
            get;
            set;
        }
        public double Score
        {
            get;
            set;
        }
        public Student(string name, double score)
        {
            Name = name;
            Score = score;
        }
    }
    class SimpleMath
    { 
        public void swap(Student stu1, Student stu2)
        {
            double temp = stu1.Score;
            stu1.Score = stu2.Score;
            stu2.Score = temp;
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Student stu11 = new Student("zxf", 98.5);
            Student stu22 = new Student("zhang", 84.5);

            Console.WriteLine("{0},{1}",stu11.Score,stu22.Score);

            SimpleMath smp = new SimpleMath();
            smp.swap(stu11, stu22);
            Console.WriteLine("{0},{1}", stu11.Score, stu22.Score);
            Console.ReadLine();
        }
    }
}

     上述例子中,引數是Student這個類,因此是引用型別,通過SimpleMath的swap函式,將stu11和stu22中的score欄位進行了交換。



相關文章