C#形參,實參,值傳遞參數,引用傳遞參數,輸出參數,參數數組的學習(一)

來源:互聯網
上載者:User

1)形參

形參顧名思義就是形式上的參數,不是實際的參數,它代替實際傳入方法的值。在方法體代碼中代表了值本身參與運算。形參定義於參數中,它不同於方法體內局部變數,因為是一個變數,在它的範圍內不允許存在一個同名的局部變數,不管他們的類型是否相同,都是不允許出現同名的。

看下面的程式碼範例:

1 //這其中的strName就是一個形參也是一個變數,不允許出現同名的局部變數2         public void SayHelloTo(string strName)3         {4             Console.WriteLine("我的名字是{0}", strName);5         }

形參的特點:

①形參是一個變數,它具有變數的全部特點。②方法的形參可以有多個,形參直接使用逗號進行隔開,即使類型相同的多個參數也不可以合并聲明。

2)實參

實參是相對於形參而言的,形參是實際值的“替身”,這個替身所代表的實際值即為實參。實際值可以是一個具體的值,也可以是一個變數

看下面的程式碼範例:

 1 static void Main(string[] args) 2         { 3             Program pro = new Program(); 4             int nNum = 10; 5             //當調用Add方法時,傳進去兩個參數,第一個是實際的值, 6             //第二個nNum是變數,但是在傳入方法時已經初始化 7             int nResult = pro.Add(20, nNum); 8         } 9 10         //這裡的a,b即為所謂的形參11         public int Add(int a, int b)12         {13             return a + b;14         }

①實參用於初始化形參的實際值或者運算式②實參位於要調用的方法參數列表中。

3)按值傳遞參數

值參數是通過將實參的值複製到形參。來實現將值傳遞到方法,也就是所謂的按值傳遞,當方法被調用是,CLR做如下操作:

①在託管棧堆中為形參分配空間 ②將實參的值複製到形參

其中,在值參數中,實參也可以是任何計算結果滿足類型要求的運算式,不一定是變數。

看下面的程式碼範例:

 1 static void Main(string[] args) 2         { 3             Program pro = new Program(); 4             //int nNum = 10; 5             //當調用Add方法時,傳進去兩個參數,第一個是實際的值, 6             //第二個nNum是變數,但是在傳入方法時已經初始化 7             //int nResult = pro.Add(20, nNum); 8             int i = 10; 9             int w = 20;10         //在這裡i * 2和(w+10)/10充當了實參的角色11             int nResult = pro.Add(i * 2, (w + 10) / 10);12             Console.WriteLine(nResult);13         }14 15         //這裡的a,b即為所謂的形參16         public int Add(int a, int b)17         {18             return a + b;19         }

下面看一段代碼,分別觀察形參,實參在託管堆和託管棧中的分配和使用方式

 1 class Program 2     { 3         static void Main(string[] args) 4         { 5             Program pro = new Program(); 6             Rectangle rectange = new Rectangle(); 7             int myValue = 10; 8  9             //這裡的rectange,myValue是實參10             pro.CalculateArea(rectange, myValue);//調用方法11         }12 13         //這裡的(Rectangle rect,int value)是形參14         public void CalculateArea(Rectangle rect,int value)15         {16             rect.Length += 10;17             rect.width += 15;18             rect.Area = rect.Length * rect.width;19             value++;20         }21     }22 23     //一個矩形類24     public class Rectangle25     {26         public int Length = 10;27         public int width = 15;28         public int Area;29     }

①在方法被調用前:系統在棧中為Rectangle類的執行個體rectange和實值型別myValue分配空間,其中參考型別rectange指向堆中的Rectangle對象執行個體,myValue是實值型別,因此其值位於託管棧中。示範圖如下

②方法調用開始時:實參將值複製到CalculateArea的形參,其中rectange為參考型別,因為複製一個新的引用——rect,此刻這兩個引用都指向同一個對象,myValue是實值型別,因此可以直接複製其值——value。示範圖如下:

③方法調用過程中,改變引用所指向對象的length欄位和width欄位,以及value值自增1

 

④方法調用以後,形參rect和value被從棧中彈出。myValue是實值型別,他的值並沒有改變(改變的是形參value);rectange是參考型別,對它所作的修改實際是對託管堆中的對象做的修改,其值未修改後的值。

 

要明白值傳遞參數,主要明白實值型別和參考型別在託管棧和託管堆中的作用狀態。這樣理解起來就非常的容易。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.