簡體   English   中英

我可以在C#函數中為參數或可選參數賦予默認值嗎?

[英]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.

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