2011-07-05 50 views
0

可能重複:
Should you declare methods using overloads or optional parameters in C# 4.0?可選參數,重載方法或屬性

您好有一種方法,其越來越多地得到多個參數。問題是這些參數中的大部分都是可選的,因爲它們只會在某些情況下影響方法,並且在調用方法的大多數實例中不需要。

現在的問題是我應該使用

  • 可選參數

    public object MyMethod(string param1, string param2, string optionalParam = null)

  • 重載方法

    public object MyMethod(string param1, string param2, null)

    public object MyMethod(string param1, string param2, string optionalParam)

  • 屬性

建議表示歡迎

+0

我認爲這裏存在一個嵌套在問題中的細微差別,即關於參數真正不需要或甚至在方法的某些調用中使用的部分。對我而言,這是一個超越可選與超載的問題。 –

+0

重複:http://stackoverflow.com/questions/3316402/method-overloading-vs-optional-parameter-in-c-4-0 http://stackoverflow.com/questions/6132010/c-optional-parameters-或-方法過載 –

回答

1

我建議一定oveloaded方法,因爲它們的類型安全不喜歡參數{}的對象,並作爲參數的數量增加了,你應該有參數數組長度的長度和所有亂七八糟的控制。從來不喜歡這種方式,所以我肯定是因爲超載。 此致敬禮。

0

我喜歡使用重載的方法,而不是可選參數,因爲:

  1. 這是漂亮
  2. 您可以使用智能感知記錄使用的每個不同的過載
  3. 除非您的方法可能同時需要所有這些可選參數,否則不會以方法名稱結束尼羅河的長度。

現在,作爲使用特性......我一般傾向於使用那些如:

  1. 一種以上的方法都需要在這些變量中的數據和/或比
  2. 更多在你的包含該方法的類之外的一個地方需要訪問/調用這些變量。

恕我直言。

0

你有多少個參數?如果我開始獲取大量參數,並且它們是相關的,那麼我通常會將它們包裝到一個類中,並將其用作該方法的單個參數。它節省了重載和複雜簽名的負擔。我確信會有人不同意這種方法,但我發現它經常會提高代碼的可讀性。

0

你也可以創建包含參數性能

class Params 
{ 
    public string param1 { get; set; } 
    public string param2 { get; set; } 



} 

public void MyMethod(Params param) { ....} 

然而一類,我覺得你可能會重新考慮你的應用程序...(但我不知道你的應用程序的要求)

0

在這種情況下,你應該使用可選參數。

如果函數的參數和/或參數類型或返回類型是不同的,你應該使用重載。