2012-03-02 96 views
1

我是C#的新手,我不確定我瞭解使用參數化方法。下面我添加了一些代碼,這些代碼是我在開發任務時給出的。這是一個簡單的圖形用戶界面,其中有一些文本框要求提供名稱和價格。參數化方法的返回值?

代碼的第一行調用方法,布爾變量inputOk需要一個true或false值,out參數也會「返回」一些值?

在第二行代碼中,我猜儘管名稱和價格的「返回」,我還需要返回true或false來獲得第一行代碼的工作?只是想確定我理解它。而且,因爲我可以從txtName.Text這樣的文本框中獲得輸入值,所以當我調用方法時,我不需要添加此值。謝謝!

bool inputOk = ReadAndValidateInput(out customerName, out seatPrice); 

private bool ReadAndValidateInput(out string name, out double price) 
+2

非常奇怪的術語。大多數方法都有參數。 – 2012-03-02 09:14:39

回答

1

簡而言之,是的,你說得對,但我確實認爲你可能需要提高你的術語;方法的返回值是return ed,而括號中的內容是參數;當你調用這個方法時,它們被稱爲參數。

有關更多詳細信息。

最好從第二行開始。

該方法的布爾值爲returnnameprice參數保證通過該方法修改(因爲它們是out,如果它們是ref那麼它們可能可能被修改);並且,雖然它們可以被認爲是附加的返回值,但實際上該機制是完全不同的:它們被稱爲輸出參數

編輯 - 關於「輸出參數」

的輸出參數仍然可以使用也在值通過(所以真的它們是輸入/輸出)。接收參數的方法必須確保它接着寫入(因爲它是out)。

最終編輯

如果該方法是一個表格類,它擁有一個文本框然後,是的,可以簡單地使用文本框變量,而不必把它傳遞在裏面寫;因爲該方法是一種「實例方法」(與static相反,它沒有this),並且該變量屬於表單的同一實例。

在第一行中,yes - inputOk通過調用方法接收布爾返回值 - 將customerNameseatPrice作爲輸出參數傳遞。方法返回後,假設沒有發生異常,inputOk將被設置爲方法的返回值;並且這兩個參數將接收由ReadAndValidateInput方法調用設置的值。

+0

感謝您的信息。我想知道第一行代碼。當我使用out的customerName,outPeicePrice時,它們是否也像普通調用一樣工作,因此我可以在方法內使用customerName和seatPrice的值,還是隻是等待將新值返回給調用? – 2012-03-02 09:37:05

+0

我原本有一條關於此的內容,但是把它拿出來是因爲我認爲它令人困惑。是的 - 您可以使用這些參數將值傳遞給方法。例如。如果該方法確保'customerName'被修剪爲空白,則可以傳入預先驗證的名稱,並在該方法內部可以執行'name = name.Trim()'。當方法返回時,調用者的'customerName'將被修剪。 – 2012-03-02 09:57:44

1

想象一下情況,其中ReadAndValidateInput不僅會驗證輸入,還會進行一些計算並返回其他值 - 例如折扣。這就是你需要輸出參數

double discount = 0; 

if(ReadAndValidateInput(customerName, seatPrice, out discount)) 
{ 
    //do something with discount. You know that input was valid 
} 
else 
{ // do not touch discount. User has not entered valid values 
} 

你不需要out參數,如果被調用方法不更改值或不產生比返回之外的其它新值。你是對的 - 可以從調用代碼訪問原始值。

1

通常應稱其爲:

string name; 
double price; 
bool inputOk = ReadAndValidateInput(out customerName, out seatPrice); 

所有三個變量將得到內ReadAndValidateInput賦值。 在C++中,不可能返回多個值,然後使用「out」關鍵字作爲替代。

但是,如果可能,最好避免它。您還可以創建兩個額外的獲取函數來返回客戶名稱和座位價格。