簡(jiǎn)單介紹C#方法參數(shù)
C#方法參數(shù)
因方法要處理更改數(shù)值,你多多少少要傳遞值給方法,并從方法獲得返回值。以下三個(gè)部分涉及到C#方法參數(shù)的三種參數(shù)。
◆輸入?yún)?shù)
◆引用參數(shù)
◆輸出參數(shù)
1.輸入?yún)?shù)
你早已在例子中見(jiàn)過(guò)的一個(gè)參數(shù)就是輸入?yún)?shù)。你用一個(gè)輸入?yún)?shù)通過(guò)值傳遞一個(gè)變量給一個(gè)方法——方法的變量被調(diào)用者傳遞進(jìn)來(lái)的值的一個(gè)拷貝初始化。示范輸入?yún)?shù)的使用。
- using System;
- public class SquareSample
- {
- public int CalcSquare(int nSideLength)
- {
- return nSideLength*nSideLength;
- }
- }
- class SquareApp
- {
- public static void Main()
- {
- SquareSample sq = new SquareSample();
- Console.WriteLine(sq.CalcSquare(25)。ToString());
- }
- }
輸入?yún)?shù)按C/C++程序員早已習(xí)慣的工作方式工作。如果你來(lái)自VB,請(qǐng)注意沒(méi)有能被編譯器處理的隱式ByVal或ByRef——如果沒(méi)有設(shè)定,參數(shù)總是用值傳遞。
這點(diǎn)似乎與我前面所陳述的有沖突:對(duì)于一些變量類型,用值傳遞實(shí)際上意味著用引用傳遞。迷惑嗎? 一點(diǎn)背景知識(shí)也不需要:COM中的東西就是接口,每一個(gè)類可以擁有一個(gè)或多個(gè)接口。一個(gè)接口只不過(guò)是一組函數(shù)指針,它不包含數(shù)據(jù)。
重復(fù)該數(shù)組會(huì)浪費(fèi)很多內(nèi)存資源;所以,僅開(kāi)始地址被拷貝給方法,它作為調(diào)用者,仍然指向接口的相同指針。那就是為什么對(duì)象用值傳遞一個(gè)引用。
2.引用參數(shù)
盡管可以利用輸入?yún)?shù)和返回值建立很多方法,但你一想到要傳遞值并原地修改它(也就是在相同的內(nèi)存位置),就沒(méi)有那么好運(yùn)了。這里用引用參數(shù)就很方便。
因?yàn)槟銈鬟f了一個(gè)變量給該方法(不僅僅是它的值),變量必須被初始化。否則,編譯器會(huì)報(bào)警。顯示如何用一個(gè)引用參數(shù)建立一個(gè)方法。
- // class SquareSample
- using System;
- public class SquareSample
- {
- public void CalcSquare(ref int nOne4All)
- {
- nOne4All *= nOne4All;
- }
- }
- class SquareApp
- {
- public static void Main()
- {
- SquareSample sq = new SquareSample();
- int nSquaredRef = 20; // 一定要初始化
- sq.CalcSquare(ref nSquaredRef);
- Console.WriteLine(nSquaredRef.ToString());
- }
- }
正如所看到的,所有你要做的就是給定義和調(diào)用都加上ref限定符。因?yàn)樽兞客ㄟ^(guò)引用傳遞,你可以用它來(lái)計(jì)算出結(jié)果
并傳回該結(jié)果。但是,在現(xiàn)實(shí)的應(yīng)用程序中,我強(qiáng)烈建議要用兩個(gè)變量,一個(gè)輸入?yún)?shù)和一個(gè)引用參數(shù)。
3.輸出參數(shù)
傳遞參數(shù)的第三種選擇就是把它設(shè)作一個(gè)輸出參數(shù)。正如該名字所暗示,一個(gè)輸出參數(shù)僅用于從方法傳遞回一個(gè)結(jié)果。它和引用參數(shù)的另一個(gè)區(qū)別在于:調(diào)用者不必先初始化變量才調(diào)用方法。
- using System;
- public class SquareSample
- {
- public void CalcSquare(int nSideLength, out int nSquared)
- {
- nSquared = nSideLength * nSideLength;
- }
- }
- class SquareApp
- {
- public static void Main()
- {
- SquareSample sq = new SquareSample();
- int nSquared; // 不必初始化
- sq.CalcSquare(15, out nSquared);
- Console.WriteLine(nSquared.ToString());
- }
- }
以上介紹C#方法參數(shù)
【編輯推薦】