當函數(shù)傳遞參數(shù)通過引用方式傳遞的時候,語法有所不同
// 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 關(guān)鍵字,在c++中沒有相似的關(guān)鍵字或用法 out 關(guān)鍵字的使用方式和ref類似,但有兩點不同,1)在使用ref參數(shù)的時候,傳遞沒有賦值的參數(shù)是不合法的。無法通過編譯。但是在使用out參數(shù)的時候是合法的。2)并且使用out參數(shù)的時候,該參數(shù)被當作沒有賦值的,對該值的調(diào)用會發(fā)生編譯錯誤。如下:
static void doubleVal(out int val){ val *= 2; // 想要使用val中的數(shù)值, // 但是val被認為是沒有賦值的,因此出現(xiàn)編譯錯誤 }static void Main(string[] args){ int val=3; doubleVal(out val); Console.WriteLine(val); // output: 40}對于不定量參數(shù)輸入的關(guān)鍵字為:param,具體實現(xiàn)如下:
static int sum(param int[] num) // 這里需要注意的是,param參數(shù)必須在參數(shù)列表的最后的位置{ int sumVal = 0; foreach (int n in num) { sum += n; } return sum;}在c#中對變量作用域的檢測更加的嚴格,比如類似下面的代碼能夠在c++中編譯通過并成功運行,而在c#中則無法通過編譯,由于在同一個作用域中調(diào)用了沒有初始化的變量。
string text;for (int i=0; i<1; i++){ text = "hello";}Console.WriteLine(text); // in cpp: cout << text << endl;函數(shù)重載和c++中的類似,但是由于c#中對于“引用”,引入了ref關(guān)鍵字,因此,對于引用參數(shù)和非引用的參數(shù)的函數(shù)在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#中關(guān)于函數(shù),還有delegate關(guān)鍵字,該關(guān)鍵字的含義用來創(chuàng)建一個能夠用來表示其他函數(shù)的東東。這有點像c中的指針函數(shù)。如:
// 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;}新聞熱點
疑難解答