[英]Can I give a default value to parameters or optional parameters in C# functions?
我可以在C#中提供默認參數嗎?
在C:
void fun(int i = 1)
{
printf("%d", i);
}
我們可以給參數一個默認值嗎? 在C#中有可能嗎? 如果是這樣,我們可以避免重載功能嗎?
向現有函數添加可選參數始終是一種不好的做法。 如果您正在處理一個必須引用具有函數的類的項目,並且我們使用可選值更改了參數,則可能會拋出運行時異常,即找不到該方法。
這是因為我們將考慮如果我們添加一個額外的可選值,如果在許多地方使用該函數,則不需要更改代碼。
function Add(int a, int b);
這將使用這種方式調用:
Add(10, 10);
但是如果我們添加這樣的可選參數,
function Add(int a, int b, int c = 0);
然后編譯器期望
Add(10, 10, 0);
實際上我們這樣調用Add(10, 10)
並且該函數在該類中不可用並導致運行時異常。
這種情況發生在將一個新參數添加到由很多地方調用的函數時,我不確定每次都會發生這種情況。 但我建議你重載這個功能。
我們總是需要重載具有可選參數的方法。 此外,如果您正在使用具有多個可選參數的函數,則最好使用參數名稱傳遞該值。
function Add(int a, int b, int c = 0);
使用以下方式調用此函數總是好的。
Add(10, 20, c:30);
這正是你在C#中的表現,但該功能最初是在.NET 4.0中添加的
是。 請參閱命名參數和可選參數 。 請注意,默認值必須是常量,所以這沒關系:
public string Foo(string myParam = "default value") // constant, OK
{
}
但這不是:
public void Bar(string myParam = Foo()) // not a constant, not OK
{
}
它只能從C#4.0開始
但是,當您使用4.0之前的C#版本時,可以使用重載方法解決此問題:
public void Func( int i, int j )
{
Console.WriteLine (String.Format ("i = {0}, j = {1}", i, j));
}
public void Func( int i )
{
Func (i, 4);
}
public void Func ()
{
Func (5);
}
(或者,您可以升級到C#4.0 offcourse)。
是的,但您需要使用.NET 3.5和C#4.0來獲得此功能。
此MSDN頁面包含更多信息。
此功能可從C#4.0獲得 - 它是在Visual Studio 2010中引入的。您可以在.NET 3.5的項目中使用它。 因此,無需將.NET 3.5中的舊項目升級到.NET 4.0。
您必須使用Visual Studio 2010,但請記住它應該編譯為默認語言版本(在項目Properties-> Buid-> Advanced ...中設置它)
此MSDN頁面包含有關VS 2010中可選參數的更多信息。
這是C#4.0的一個功能,但在該版本之前不使用函數重載是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.