簡體   English   中英

修改方法以接受不同數量和類型的參數

[英]Modifying method to accept different number and type of parameters

我正在與其他一些大學合作開展這個項目。 它基於Windows MDI forms構建,並且由於客戶的特定需求,我們有自定義方法來加載表單。

在開始時,該方法只需要兩個參數:

protected void LoadForm<T>(ToolStripButton formButton, string buttonText) where T : Base Form

因為即使這是繼承的代碼,我們繼承了一些不需要傳遞任何參數的表單,所以我們有了這個方法:

protected void LoadForm<T>()
{
    LoadForm<T>(null, null);
}

然后我的大學需要傳遞另一個參數: long? EntityId long? EntityId並且再次不破壞現有代碼他將上述方法更改為:

protected void LoadForm<T>(long? loadEntityId = null) where T : BaseForm
{
    LoadForm<T>(null, null, loadEntityId);
}

並且業務邏輯的實際方法變為:

protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null) where T : BaseForm

現在我需要自己傳遞第四個參數,而且不破壞前面代碼的問題是實際的。 我以為我的邏輯是正確的,但似乎我沒有。 我需要傳遞一個布爾參數bool IsClosingForm所以我用這樣的業務邏輯制作了這個方法:

protected void LoadForm<T>(ToolStripButton formButton, string buttonText, long? loadEntityId = null, bool IsClosingForm= true) where T : BaseForm

並添加新方法來處理需要傳遞bool參數的情況:

protected void LoadForm<T>(bool IsClosingForm= true) where T : BaseForm
{
    LoadForm<T>(null, null, null, IsClosingForm);
}

並且還修改我的院門方法來調用四參數方法:

protected void LoadForm<T>(long? EntityId = null) where T : BaseForm
{
    LoadForm<T>(null, null, EntityId, true);
}

但它沒有像那樣工作,我得到的錯誤是:

protected void LoadForm<T>(long? EntityId = null)protected void LoadForm<T>(bool IsClosingForm= true)方法之間的調用不明確

顯而易見,我沒有得到這里的邏輯,所以我有兩個問題 - 如何修改代碼使其工作,如果可能的話,我希望有人指出導致我的錯誤的原因,以便我可以得到這背后的邏輯。 首先,這似乎很容易,但現在我覺得我錯過了一些我不應該理解的東西。

這是一個含糊不清的電話:

LoadForm<T>()

該調用可以解釋為以下兩種方法之一:

  • LoadForm<T>(long? EntityId = null)
  • 或者作為LoadForm<T>(bool IsClosingForm= true)

由於您已為參數指定了默認值,因此在未提供參數時,編譯器無法區分這兩個重載。

也許您可以刪除默認值並創建另一個不期望任何參數的重載。 在沒有參數的情況下調用LoadForm時,將使用此新重載

你有可能傳入0或1並且它是一個模糊的,因為它是一個boollong? 可能在方法調用中將其強制轉換為long ,以確保注冊long而不是bool

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM