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

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

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-04

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

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

    string myString; 

    myString = GetString();

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

    double myVal;

    double multiplier = 5.3;

    myVal = GetVal() * multiplier;

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

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

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

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

static <returnType> <FunctionName>()

{

    ...

    return <returnVa1ue>;

}

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

static double GetVal() 

{

    return 3.2;

}

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

當(dāng)執(zhí)行到return語(yǔ)句時(shí),程序會(huì)立即返回調(diào)用代碼。這條語(yǔ)句后面的代碼都不會(huì)執(zhí)行。但這并不意味著return語(yǔ)句只能放在函數(shù)體的最后一行??梢栽谇斑叺拇a里使用return語(yǔ)句,例如放在分支邏輯之后。把return語(yǔ)句放在for循環(huán)、if塊或其他結(jié)構(gòu)中會(huì)使該結(jié)構(gòu)立即終止,函數(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的值,將返回兩個(gè)值中的一個(gè)。這里的唯一限制是,必須在函數(shù)的閉合花括號(hào)}之前處理 return 語(yǔ)句。下面的代碼是不合法的:

static double GetVal()

{

    double checkVal;

    // checkVal assigned a value through some logic.

    if (checkVal < 5) 

        return 4,7;

}

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

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

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

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

    static double Multiply(double myVail, double myVal2)

{

    return myVail * myVal2;

}

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

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

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

相關(guān)視頻回答
回復(fù)(0)
返回頂部