函數----Beginning Visual C#

來源:互聯網
上載者:User

標籤:style   blog   http   color   io   os   ar   使用   for   

更多相關文章,見本人的個人首頁:zhongxiewei.com

當函數傳遞參數通過引用方式傳遞的時候,文法有所不同

// in cppvoid doubleVal(int &val) {    // ...}int main() {    int val = 20;    doubleVal(val);    cout << val << endl; // output: 40}
// in c sharpstatic void doubleVal(ref int val) // 使用ref進行標識{    val *= 2;    }static void Main(string[] args){    int val = 20;    doubleVal(ref val);    Console.WriteLine(val); // output: 40}

out 關鍵字,在c++中沒有相似的關鍵字或用法 out 關鍵字的使用方式和ref類似,但有兩點不同,1)在使用ref參數的時候,傳遞沒有賦值的參數是不合法的。無法通過編譯。但是在使用out參數的時候是合法的。2)並且使用out參數的時候,該參數被當作沒有賦值的,對該值的調用會發生編譯錯誤。如下:

static void doubleVal(out int val){    val *= 2;   // 想要使用val中的數值,                // 但是val被認為是沒有賦值的,因此出現編譯錯誤 }static void Main(string[] args){    int val=3;    doubleVal(out val);    Console.WriteLine(val); // output: 40}

對於不定量參數輸入的關鍵字為:param,具體實現如下:

static int sum(param int[] num) // 這裡需要注意的是,param參數必須在參數列表的最後的位置{    int sumVal = 0;    foreach (int n in num)    {        sum += n;    }    return sum;}

在c#中對變數範圍的檢測更加的嚴格,比如類似下面的代碼能夠在c++中編譯通過並成功運行,而在c#中則無法通過編譯,由於在同一個範圍中調用了沒有初始化的變數。

string text;for (int i=0; i<1; i++){    text = "hello";}Console.WriteLine(text); // in cpp: cout << text << endl;

函數重載和c++中的類似,但是由於c#中對於“引用”,引入了ref關鍵字,因此,對於引用參數和非引用的參數的函數在c#中也能夠重載,這在c++中是不合理的。如:

// in c#static void showDouble(ref int val) {}static void showDouble(int val) {}// in cpp is errorvoid showDouble(int &val) {}void showDouble(int val) {}

在c#中關於函數,還有delegate關鍵字,該關鍵字的含義用來建立一個能夠用來表示其他函數的東東。這有點像c中的指標函數。如:

// in c#delegate double processDelegate(double param1, double param2);static double Multiply(double param1, double param2){    return param1 * param2;}static double Divide(double param1, double param2){    return param1 / param2;}static void Main(string[] args){    processDelegate process;    process = new processDelegate(Multiply);    Console.WriteLine("{0}", process(3, 4));    process = new processDelegate(Divide);    Console.WriteLine("{0}", process(3, 4));}
// in cpp#include <iostream>using namespace std;int multi(int a, int b) {    return a * b;}int add(int a, int b) {    return a + b;}int main() {    int (*fn)(int,int);        fn = multi;    cout << "multi " << fn(2,3) << endl;    fn = add;    cout << "add " << add(2,3) << endl;}

函數----Beginning Visual C#

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.