我有一個可選參數的這種方法。私有方法參數
public static Test(String connection, Int32 retryInfiniteLoopGuard = 0)
有沒有辦法以某種方式紀念retryInfiniteLoopGuard
爲private
,這樣它會調用從類以外的方法時成爲無形?
如果你想知道爲什麼,retryInfiniteLoopGuard
是遞歸執行,應該是不可見的用戶...
今天我超載使用,但有沒有其他辦法?
我有一個可選參數的這種方法。私有方法參數
public static Test(String connection, Int32 retryInfiniteLoopGuard = 0)
有沒有辦法以某種方式紀念retryInfiniteLoopGuard
爲private
,這樣它會調用從類以外的方法時成爲無形?
如果你想知道爲什麼,retryInfiniteLoopGuard
是遞歸執行,應該是不可見的用戶...
今天我超載使用,但有沒有其他辦法?
使用該參數創建該方法的私有重載並從公共版本中刪除該參數。比讓公衆版本撥打默認值的私人版本:
private static int Test(string connection, int retryInfiniteLoopGuard)
{
// The code
}
public static int Test(String connection)
{
return Test(connection, 0);
}
沒有其他方法可以實現該目標。
你真的認爲我不知道重載嗎? – user1662812
@ user1662812:確實,在你編輯你的問題之前,它看起來像這樣。 –
@ user1662812你會很驚訝我們必須承擔或不承擔有關這裏提出的問題。我們必須 - 並且*應該* - 保持非常開放的態度。 –
不知道爲什麼你會需要它,但你可以創建兩個方法,這樣
public static Test(String connection, Int32 retryInfiniteLoopGuard)
{
//method body
}
public static Test(String connection)
{
Test(connection, 0);
}
不是他們想要的東西 - 帶額外'int'的重載應該是私有的。 –
所以你真的認爲我不知道重載? – user1662812
重載清楚地解決了你的問題。無論你是第一種私人還是公開的方式,都是你的決定。所以,問題解決了。 –
在新的C#6你能做到以下幾點:
public static int Test(String connection, private Int32 retryInfintiteLoopGuard = 0)
{
/* Enter Code Here */
}
它編譯爲:
private static int test(String connection, Int32 retryInfiniteLoopGuard)
{
/* Enter Code Here */
}
public static int Test(String connection)
{
return test(connection, 0);
}
這種方式的工作方式是所有的參數隱式地可訪問的方法,除非cou rse另有明確規定。 支持的訪問器:
public
internal
protected
private
你如何爲你做這項工作?我的目標是.NET Framework 4.6.1(現在是最新版本),並使用VS2017,但這不適用於我。 – Jeppe
我不認爲這是在C#6中發佈的。 –
出於純粹病態的好奇心 - 你爲什麼要另一種方式? –
由於與在C#4.0中引入可選參數相同的原因...我只想更深入一步並隱藏可選參數 – user1662812
C#4.0中的可選參數值是通過在調用點處注入這些值來編譯的。即即使你的代碼是Test(連接),編譯器實際上也會產生一個像Test(connection,0)這樣的調用。所以,如果不使用重載,就沒有辦法達到你想要的行爲。 –