程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> C#的引用參數和值參數

C#的引用參數和值參數

編輯:關於C#

引用參數和值參數

在前面的函數學習中,所有函數的參數都是有值參數:在使用參數的時候把一個值傳遞給函數使用的一個變量.在函數中對此變量的任何修改都不會影響函數調用中指定的參數.還是舉例說明比較好:

static void doDouble(double mynum)

{

mynum *= 2;

Console.WriteLine("mynum in 函數中doDouble{0}", mynum);

}

static void Main(string[] args)

{

Console.WriteLine("引用函數");

double mynum = 15;

Console.WriteLine("調用函數之前的mynum={0}",mynum);

doDouble(mynum);

Console.WriteLine("調用函數之後的mynum={0}",mynum);

結果輸出如下圖所示:

 

在main()函數中的mynum=15;調用

doDouble(mynum);把mynum的值傳遞給static void doDouble(double mynum)函數中的局域變量mynum;但是局域變量mynum在此函數中的改變

沒有影響main()函數中的mynum.

當然要改變mynum的值也比較簡單.只要對函數做如下修改:

static double doDouble(double mynum)

{

mynum *= 2;

Console.WriteLine("mynum in 函數中doDouble{0}", mynum);

return mynum;

}

static void Main(string[] args)

{

Console.WriteLine("引用函數");

double mynum = 15;

Console.WriteLine("調用函數之前的mynum={0}",mynum);

mynum = doDouble(mynum);

Console.WriteLine("調用函數之後的mynum={0}",mynum);

輸出結果是

 :

但是以上的方法在改變多個參數的時候就不行了,此時可以通過引用傳遞參數:函數處理的變量與函數調用中使用的變量相同,在C#中使用關鍵字:ref指定參數,在調用函數的時候用: doDouble(ref mynum); static void doDouble( ref double mynum),這樣修改後的結果與上面的結果一樣:

 

Main()函數

Main()函數是C#應用程序的入口點,執行這個函數就是執行應用程序,也就是說在執行過程開始時候,會從Main()函數開始,當Main()執行結束之後程序運行就結束了.在應用程序中Main()函數的形式是: static void Main(string[] args);Main()函數有形式: static void Main() ,static void Main(string[] args) ,static int Main(), static int Main(string[] args).Main()函數的參數args是從應用程序的外部接受信息的方法.本文發表於編程入門網:www.bianceng.cn

結構函數

所謂結構函數就是結構體中的函數:這中函數非常實用:

struct Cloth  //結構體名字

{

public int age;//衣服使用壽命

public string sex;//合適性別

public string style;//款式

public double price;//價格

public double count;//折扣

public double SellPrice()

{

return count * price;

}

}

Cloth mycloth;

mycloth.age = 2;

mycloth.count = 0.98;

mycloth.price = 1000;

mycloth.sex = "man";

mycloth.style = "長褲";

Console.WriteLine("結構體數據輸出:");

Console.WriteLine("age={0},sex={1},style={2},

price={3},count={4}",

mycloth.age,mycloth.sex,mycloth.style,mycloth.price,mycloth.count);

double sellprice = mycloth.SellPrice();

Console.WriteLine("出售價格mycloth.SellPrice();{0}", sellprice);

輸出結果是:

 

如果沒有結構函數,那麼在計算count * price的時候就得使用:

sellprice =mycloth.price*mycloth.count.當然可以根據需要和結構體的特點而定義結構函數.

委托

委托是一種可以把引用存儲為函數的類型,只有在介紹到事件和事件處理的時候才解釋的清楚.委托的聲明非常類型函數,但是不帶函數體,而且要使用delegate,委托的聲明指定了一個函數簽名,其中包含一個返回類型和參數列表.定義了委托後就可以聲明該委托類型的變量,接著把這個變量初始化為與委托有相同簽名的函數引用.之後就可以使用委托變量調用這個函數.先看個例題:

delegate double ProcessDelegate(double param1,double param2);

static double Mult(double param1,double param2)

{

return param1 * param2;

}

static double Divide(double param1,double param2)

{

return param1 / param2;

}

ProcessDelegate process;

double param1, param2;

param1 = 16;

param2 = 4;

process = new ProcessDelegate(Mult);

Console.WriteLine("ProcessDelegate(Mult);{0}",

process(param1,param2));

process = new ProcessDelegate(Divide);

Console.WriteLine("ProcessDelegate(Divide);{0}", process(param1, param2));

程序結果是:

 

Delegate關鍵字指定該定義是用於委托的,而不是用於函數的, 委托和事件這兩個概念是完全配合的。委托僅僅是函數指針,那就是說,它能夠引用函數,通過傳遞地址的機制完成。委托是一個類,當你對它實例化時,要提供一個引用函數,將其作為它構造函數的參數.

這一節裡面的內容比較雜亂.大家可以通過其他方法可以深入學習各個主題.

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