引用參數和值參數
在前面的函數學習中,所有函數的參數都是有值參數:在使用參數的時候把一個值傳遞給函數使用的一個變量.在函數中對此變量的任何修改都不會影響函數調用中指定的參數.還是舉例說明比較好:
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關鍵字指定該定義是用於委托的,而不是用於函數的, 委托和事件這兩個概念是完全配合的。委托僅僅是函數指針,那就是說,它能夠引用函數,通過傳遞地址的機制完成。委托是一個類,當你對它實例化時,要提供一個引用函數,將其作為它構造函數的參數.
這一節裡面的內容比較雜亂.大家可以通過其他方法可以深入學習各個主題.