在C++中,可以跳過方法參數標識符,如果它是未使用的:C#中沒有標識符的參數?
void foo(int, int) {}
這是在接口實現,其中一個巨大的方法的數目具有空體的情況下是非常有用的。是否有可能在C#中做類似的事情?直接測試給出錯誤:
public void OnAddInsUpdate(ref Array) {} // Error, need identifier :(
在C++中,可以跳過方法參數標識符,如果它是未使用的:C#中沒有標識符的參數?
void foo(int, int) {}
這是在接口實現,其中一個巨大的方法的數目具有空體的情況下是非常有用的。是否有可能在C#中做類似的事情?直接測試給出錯誤:
public void OnAddInsUpdate(ref Array) {} // Error, need identifier :(
這不受C#語言支持。
我不相信這是可能的。如果您有未使用的參數,您應該考慮重載或命名參數(C#4.0中的新增參數)。
在C#中不可能需要提供參數名稱,但是,我沒有看到方法中的檢查有什麼問題,以查看它是否已被設置,例如,
public void OnAddInsUpdate(int x, int? y)
{
// do something with x
if (y != null)
// do something with y
}
C#4.0引入了Optional Parameters。
int不是一個對象,所以我不認爲你可以發送它爲null。你會得到一個編譯錯誤。 – 2009-11-06 13:09:04
整數永遠不會爲null,默認情況下int總是有一個值,0。 – 2009-11-06 13:09:47
您可以使用可空類型 – James 2009-11-06 13:10:48
你有多個參數實際上應該使用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; }
}
也許使用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);
}
}
接口意味着你必須執行定義的所有方法。你可以把它變成一個抽象類,用空的方式實現「未使用」的方法,而將抽象類型抽象爲你需要實現的方法。 – 2009-11-06 13:25:29