程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 總體了解C#(14.參數修飾符)

總體了解C#(14.參數修飾符)

編輯:C#入門知識

14.參數修飾符

(1)ref參數修飾符

C#(和Java相比)可以讓你按引用傳遞參數。描述這一點的最明顯的例子是通用交換方法。不象C++,不但是聲明時,調用時也要加上ref指示符:【譯注:不要誤會這句話,C++中當然是沒有ref關鍵字】

public class Test

{

public static void Main ()

{

int a = 1;

int b = 2;

swap (ref a, ref b);

}

public static void swap (ref int a, ref int b)

{

int temp = a;

a = b;

b = temp;

}

}

(2)out參數修飾符

out關鍵字是對ref參數修飾符的自然補充。Ref修飾符要求參數在傳入方法之前必須被賦值。而out修飾符則明確當方法返回時需顯式給參數賦值,。

(3)params參數修飾符

params修飾符可被加在方法的最後的參數上,方法將接受任意數量的指定類型的參數【譯注:在一個方法聲明中,只允許一個params性質的參數】。例如:

public class Test

{

public static void Main ()

{

Console.WriteLine (add (1, 2, 3, 4).ToString());

}

public static int add (params int[] array)

{

int sum = 0;

foreach (int i in array)

sum += i;

return sum;

}

}

【作者注:學習Java時一個非常令人詫異的事是發現Java不能按引用傳遞參數,盡管不久以後,你很少會再想要這個功能,並且寫代碼時也不需要它了。當我第一次閱讀C#規范的時候,我常想,“他們干嗎把加上這個功能,沒有它我也能寫代碼”。經過反省以後,我意識到這其實並不是說明某些功能是否有用的問題,更多是說明了沒有它你就另需別的條件才能實現的問題。

當考慮到C++是怎麼做的時候,Java是干了件好事,它簡化了參數如何傳遞的問題。在C++中,方法【譯注:C++中沒有方法一說,應該稱為“函數”或“成員函數”】的參數和方法調用通過傳值、引用、指針【譯注:例如int、int*、int&】,使得代碼變得不必要的復雜。C#顯式傳遞引用,不管是方法聲明時還是調用時。它大大地減少了混亂【譯注:這句話應該這麼理解:由於C++的語法問題,有時你並不知道你是在使用一個對象還是一個對象引用,本節後有示例】,並達到了和Java同樣的目標,但是C#的方式更有表達力。顯然這是C#的主旨—它不把程序員圈在一個圈裡,使他們必須繞一個大彎子才能做成某件事。還記得Java嗎?Java指南裡,建議如何解決傳引用的問題,你應該傳遞一個1個元素的數組去保存你的值,或另做一個類以保存這個值。

【譯注:

#include "stdafx.h"

class ParentCls

{

public:

virtual void f(){printf("ParentCls ");}

};

class ChildCls : public ParentCls

{

public:

virtual void f(){printf("ChildCls ");}

};

void Test1(ParentCls pc) {pc.f();}

void Test2(ParentCls& pc) {pc.f();}

int main(int argc, char* argv[])

{

ChildCls cc;

Test1(cc);//輸出ParentCls

Test2(cc);//輸出ChildCls

file://只看調用處,是不知道你使用的引用還是對象的,但運行結果迥異!

return 0;

}

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