2014-04-10 29 views
0

我有一個函數:無意中不宣佈超載。你怎麼看?

ViewModel GetviewModel(ViewModel viewModel) 
{ 
    viewModel.Whatever = "something"; 
    return viewModel 
} 

我把它叫做這樣在不知不覺中在我的控制器,並沒有抱怨,我沒有返回模型傳遞到一個變量(因爲很明顯,它的工作原理斷參考)。

GetviewModel(viewModel); 
return viewModel; 

有沒有一種方法,以幫助其他開發出通過宣稱「是的,你的確可以使用GetviewModel功能void類型」 ..類似:

ViewModel, void GetviewModel(ViewModel viewModel) 
{ 
    viewModel.Whatever = "something"; 
    return viewModel 
} 

顯然,上述不工作:)

我不希望再次聲明一個具有相同內容的整個重載函數。

+0

你是在談論*覆蓋*還是關於*重載*? –

+0

另外,我不確定你在問什麼。任何來自方法的返回值都可以被拋棄,如果需要的話,調用者總是使用返回值。那麼,額外的',void'會表達或改變什麼? –

+0

SORRRY,更新了問題lmao ...重寫=過載,抱歉doiiii – Jimmyt1988

回答

2

C#不允許只改變返回值的重載方法。試想一下它會對var關鍵字做什麼。你應該做的是清楚地向代碼的其他用戶傳達它的功能。調用一個方法GetSomething,它採用Something的參數,實際上只是設置一個值,當然應該被稱爲別的東西。你的例子應該可能被稱爲UpdateWhatever

總結:不,您不能僅在返回值上創建方法重載。

+0

然後評論。謝謝matey! – Jimmyt1988

0

你可能應該調用你的函數'UpdateViewModel'並將返回值改爲void,這樣其他人可以告訴它它正在修改狀態並且它不需要返回值。

+1

我有理由相信他有時想使用返回值。 – DidIReallyWriteThat

+0

他正在傳遞viewModel,所以他已經有了它 –

+0

你的權利當然。但他的問題似乎是要創造額外的過載表達式,這意味着他想保留現有的過載表達式並添加一個無效的表達式,這本身毫無意義。 @ Jimmyt1988我認爲你的回答是好的,我想知道是否有一種方法來說明是的,我計劃使用我的功能作爲無效的人...這真的沒什麼大不了...只是狩獵供參考。感謝您的答覆! – DidIReallyWriteThat

0

林不知道你的問題到底是什麼。這聽起來像你問如何讓其他人知道你的方法不需要爲變量賦值。這是一個給定的。任何返回值都可以使用或不使用。

你的第二個問題似乎是如何讓人們知道你的方法做了一些改變,將其作爲對象的參數。這也在方法創建中被告知。

林不知道,如果我明白你的問題,但。