程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#形參,實參,值傳遞參數,引用傳遞參數,輸出參數,參數數組的學習(一)

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

編輯:C#入門知識

 1)形參
形參顧名思義就是形式上的參數,不是實際的參數,它代替實際傳入方法的值。在方法體代碼中代表了值本身參與運算。形參定義於參數中,它不同於方法體內局部變量,因為是一個變量,在它的作用域內不允許存在一個同名的局部變量,不管他們的類型是否相同,都是不允許出現同名的。
看下面的代碼示例:
 
//這其中的strName就是一個形參也是一個變量,不允許出現同名的局部變量
        public void SayHelloTo(string strName)
        {
            Console.WriteLine("我的名字是{0}", strName);
        }
形參的特點:
 
①形參是一個變量,它具有變量的全部特點。②方法的形參可以有多個,形參直接使用逗號進行隔開,即使類型相同的多個參數也不可以合並聲明。
2)實參
實參是相對於形參而言的,形參是實際值的“替身”,這個替身所代表的實際值即為實參。實際值可以是一個具體的值,也可以是一個變量
看下面的代碼示例:
 
static void Main(string[] args)
        {
            Program pro = new Program();
            int nNum = 10;
            //當調用Add方法時,傳進去兩個參數,第一個是實際的值,
            //第二個nNum是變量,但是在傳入方法時已經初始化
            int nResult = pro.Add(20, nNum);
        }
 
        //這裡的a,b即為所謂的形參
        public int Add(int a, int b)
        {
            return a + b;
        }
 
①實參用於初始化形參的實際值或者表達式②實參位於要調用的方法參數列表中。
3)按值傳遞參數
值參數是通過將實參的值復制到形參。來實現將值傳遞到方法,也就是所謂的按值傳遞,當方法被調用是,CLR做如下操作:
①在托管棧堆中為形參分配空間 ②將實參的值復制到形參
其中,在值參數中,實參也可以是任何計算結果滿足類型要求的表達式,不一定是變量。
看下面的代碼示例:
 
static void Main(string[] args)
        {
            Program pro = new Program();
            //int nNum = 10;
            //當調用Add方法時,傳進去兩個參數,第一個是實際的值,
            //第二個nNum是變量,但是在傳入方法時已經初始化
            //int nResult = pro.Add(20, nNum);
            int i = 10;
            int w = 20;
        //在這裡i * 2和(w+10)/10充當了實參的角色
            int nResult = pro.Add(i * 2, (w + 10) / 10);
            Console.WriteLine(nResult);
        }
 
        //這裡的a,b即為所謂的形參
        public int Add(int a, int b)
        {
            return a + b;
        }
 
下面看一段代碼,分別觀察形參,實參在托管堆和托管棧中的分配和使用情況
 
class Program
    {
        static void Main(string[] args)
        {
            Program pro = new Program();
            Rectangle rectange = new Rectangle();
            int myValue = 10;
 
            //這裡的rectange,myValue是實參
            pro.CalculateArea(rectange, myValue);//調用方法
        }
 
        //這裡的(Rectangle rect,int value)是形參
        public void CalculateArea(Rectangle rect,int value)
        {
            rect.Length += 10;
            rect.width += 15;
            rect.Area = rect.Length * rect.width;
            value++;
        }
    }
 
    //一個矩形類
    public class Rectangle
    {
        public int Length = 10;
        public int width = 15;
        public int Area;
    }
①在方法被調用前:系統在棧中為Rectangle類的實例rectange和值類型myValue分配空間,其中引用類型rectange指向堆中的Rectangle對象實例,myValue是值類型,因此其值位於托管棧中。演示圖如下
 

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

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

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

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved