位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 定義和使用函數(shù)—返回值

提問人:劉團圓發(fā)布時間:2020-12-04

    通過函數(shù)進行數(shù)據(jù)交換的最簡單方式是利用返回值。有返回值的函數(shù)會最終計算得到這個值,就像在表達式中使用變量時,會計算得到變量包含的值一樣。與變量一樣,返回值也有數(shù)據(jù)類型。

例如,有一個函數(shù)GetStringO,其返回值是一個字符串,可在代碼中使用該函數(shù),如下所示:

    string myString; 

    myString = GetString();

還有一個函數(shù)GetValO,它返回一個double值,可在數(shù)學表達式中使用它:

    double myVal;

    double multiplier = 5.3;

    myVal = GetVal() * multiplier;

當函數(shù)返回一個值時,必須采用以下兩種方式修改函數(shù):

?在函數(shù)聲明中指定返回值的類型,但不使用關鍵字void。

?使用return關鍵字結束函數(shù)的執(zhí)行,把返回值傳送給調用代碼。

從代碼角度看,對于我們討論的控制臺應用程序函數(shù),其使用返回值的形式如下所示:

static <returnType> <FunctionName>()

{

    ...

    return <returnVa1ue>;

}

這里唯一的限制是<returnType>必須是<returnType>類型的值,或者可以隱式轉換為該類型。但是,可以是任何類型,包括前面介紹的較復雜類型。這段代碼可以很簡單:

static double GetVal() 

{

    return 3.2;

}

但是,返回值通常是函數(shù)執(zhí)行的一些處理的結果。上面的結果使用const變量也可以簡單地實現(xiàn)。

當執(zhí)行到return語句時,程序會立即返回調用代碼。這條語句后面的代碼都不會執(zhí)行。但這并不意味著return語句只能放在函數(shù)體的最后一行??梢栽谇斑叺拇a里使用return語句,例如放在分支邏輯之后。把return語句放在for循環(huán)、if塊或其他結構中會使該結構立即終止,函數(shù)也立即終止。例如:

static double GetVal()

{

    double checkVal;

    // cheGkVal assigned a value through some logic (not shown here). 

    if (checkVal < 5) 

        return 4.7;

    return 3.2;

}

根據(jù)checkVal的值,將返回兩個值中的一個。這里的唯一限制是,必須在函數(shù)的閉合花括號}之前處理 return 語句。下面的代碼是不合法的:

static double GetVal()

{

    double checkVal;

    // checkVal assigned a value through some logic.

    if (checkVal < 5) 

        return 4,7;

}

    如果checkVal>= 5,就不會執(zhí)行到return語句,這是不允許的。所有處理路徑都必須執(zhí)行到return語句。大多數(shù)情況下,編譯器會檢查是否執(zhí)行到return語句,如果沒有,就給出錯誤“并不是所有的處理路徑都返回一個值”。

    執(zhí)行一行代碼的函數(shù)可使用C# 6引入的一個功能:表達式體方法(expression-bodied method)。以下函數(shù)模式使用=>(Lambda箭頭)來實現(xiàn)這一功能。

    static <returnType> <FunctionName>() => <myVall * myVal2>;

例如,C#6之前的Multip]〆)函數(shù)如下:

    static double Multiply(double myVail, double myVal2)

{

    return myVail * myVal2;

}

現(xiàn)在可以使用=>(Lambda箭頭)編寫它。下述代碼用更簡單和統(tǒng)一的方式表達方法的意圖:

    static double Multiply(double myVall, double myVa12) => mVall * MyVal2;

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部