2009-11-06 72 views
0

在C++中,可以跳過方法參數標識符,如果它是未使用的:C#中沒有標識符的參數?

void foo(int, int) {} 

這是在接口實現,其中一個巨大的方法的數目具有空體的情況下是非常有用的。是否有可能在C#中做類似的事情?直接測試給出錯誤:

public void OnAddInsUpdate(ref Array) {} // Error, need identifier :(
+0

接口意味着你必須執行定義的所有方法。你可以把它變成一個抽象類,用空的方式實現「未使用」的方法,而將抽象類型抽象爲你需要實現的方法。 – 2009-11-06 13:25:29

回答

3

這不受C#語言支持。

3

我不相信這是可能的。如果您有未使用的參數,您應該考慮重載或命名參數(C#4.0中的新增參數)。

1

在C#中不可能需要提供參數名稱,但是,我沒有看到方法中的檢查有什麼問題,以查看它是否已被設置,例如,

public void OnAddInsUpdate(int x, int? y) 
{ 
    // do something with x 
    if (y != null) 
     // do something with y 
} 

C#4.0引入了Optional Parameters

+0

int不是一個對象,所以我不認爲你可以發送它爲null。你會得到一個編譯錯誤。 – 2009-11-06 13:09:04

+0

整數永遠不會爲null,默認情況下int總是有一個值,0。 – 2009-11-06 13:09:47

+0

您可以使用可空類型 – James 2009-11-06 13:10:48

1

你有多個參數實際上應該使用EventArgs完成事件的例子。

這有很多好處。主要的一點是你可以通過大量的潛在價值,但只填充相關的價值。

其他好處是,您可以在稍後階段添加更多值而不更改事件的簽名,並要求更新所有消費者。

所以,舉例來說:

public void OnAddInsUpdate(AddInsUpdateEventArgs e) { } 

public class AddInsUpdateEventArgs : EventArgs 
{ 
    public int x { get; } // Readonly for event handler 
    public int? y { get; set; } // Read/Write (eg if you can accept values back) 
    public bool? Handled { get; set; } 
} 
0

也許使用params會給你想要的東西:

public class MyClass 
{ 

    public static void UseParams(params int[] list) 
    { 
     for (int i = 0 ; i < list.Length ; i++) 
     Console.WriteLine(list[i]); 
     Console.WriteLine(); 
    } 

    public static void UseParams2(params object[] list) 
    { 
     for (int i = 0 ; i < list.Length ; i++) 
     Console.WriteLine(list[i]); 
     Console.WriteLine(); 
    } 

    public static void Main() 
    { 
     UseParams(1, 2, 3); 
     UseParams2(1, 'a', "test"); 

     int[] myarray = new int[3] {10,11,12}; 
     UseParams(myarray); 
    } 
}