C# for Unity 編程語言快速入門教程(連載9)_C#OOP編程之值類型與引用類型
C#編程語言中有“值類型”與“引用類型”之分。講這個概念之前,先說明一下什麼是“形式參數”(簡稱:“形參”),什麼是“實際參數”(簡稱“實參”)。
“形參”("形式參數"): C#方法中的參數列表,即可以稱爲“形式參數",因爲在程序運行之前,我們是不能知道具體的參數到底是什麼。
"實參"("實際參數"): 給C#定義的帶參方法,進行實際賦值的代碼數值,稱爲“實參”。因爲我們可以知道或者估計實際運行過程中參數的數值類型與數值多少。
知道以上概念後,我們再來說明“值傳遞”與“引用傳遞”
所謂值傳遞是指: “實參”傳遞給“形參”爲本身的一個拷貝副本。
所謂引用傳遞指: “實參”傳遞給“形參”爲本身的“地址”作爲數值給形參。
軟件編程中正確理解值傳遞與引用傳遞,對設計優秀軟件有重要作用。
關於本節知識點,我們總結如下規則:
規則1: 基本數據類型(int,float ,double,char),都是值傳遞。
規則2: 類的實例化對象與數組都是“引用”傳遞。
規則3: ref (輸入輸出)關鍵字可以把基本數據類型的值傳遞,改爲“引用傳遞”。
規則4: 字符串不是基本數據類型,但是它默認也是“值傳遞”,當然可以通過ref 變爲引用傳遞。
一般我們學習本節,還會增加一個常用關鍵字:out 。 這個關鍵字定義方法的參數爲“輸出參數”,使得一個方法,具備多個輸出參數。(否則只能用方法的返回類型,做唯一的返回類型)。
爲了更好的理解C#的“形參”與“實參”,筆者提供如下習題,供C#初學者進行研究學習,不明之處,歡迎留言討論!
//習題: 學習面向對象編程: 值類型與引用類型
class Program
{
//值類型
public void AddNumber(int num1) //num1 稱爲 “形參”
{
num1 = num1 + 100;
}
//引用類型
public void AddNumberWithRef(ref int num1)
{
num1 = num1 + 100;
}
//引用類型(傳遞)
public void AddNumberByArray(int[] intArray)
{
intArray[0] = intArray[0] + 100;
}
//引用傳遞(對象類型)
public void AddNumberByPerson(Person per)
{
per.IntHeight = 200;
per.strName = "李四";
}
//字符串傳遞
public void AddNumberByString(ref string str)
{
str = str + "大家好!";
}
//演示out 關鍵字的作用
public void ComputNumber(int intNum1,int intNum2,out int intAddResult,out int intSubResult)
{
intAddResult = intNum1 + intNum2;
intSubResult = intNum1 - intNum2;
}
static void Main1(string[] args)
{
//Person perObj = new Person();
Program obj = new Program();
//int intTestNum = 10;
//int[] intArray = new int[1];
//intArray[0] = 20;
//string strTest = "同學們";
//"值傳遞" 測試,傳遞的是“複製品”
//obj.AddNumber(intTestNum); //intTestNum 稱爲“實參” ,結果是:10
//"引用數據傳遞"測試。
//obj.AddNumberWithRef(ref intTestNum);//結果爲: 110.
//obj.AddNumberByArray(intArray); //結果爲: 120;
//“對象”數據傳遞
//obj.AddNumberByPerson(perObj);
//字符串的傳遞測試
//obj.AddNumberByString(ref strTest);
//演示out 關鍵字作用
int intAddResult = 0;
int intSubResult = 0;
obj.ComputNumber(10, 20, out intAddResult, out intSubResult);
//顯示結果
Console.WriteLine("10+20={0},10-20={1}",intAddResult,intSubResult);
}
}