2013-06-15 3 views
1

У меня есть много функций, где я беру информацию и заполняю класс или что-то в этом роде. Они готовы принять неполную информацию и часто заполнять значениями по умолчанию.Лучший способ сделать перегруженные функции в C#?

Вот грубый пример.

string name; 
string address; 
string phonenum; 

void SaveClass(string a) 
{ 
    SaveClass(a, "UNSET", "UNSET"); 
} 

void SaveClass(string a, string b) 
{ 
    SaveClass(a, b, "UNSET"); 
} 

void SaveClass(string a, string b, string c) 
{ 
    name = a; 
    address = b; 
    phonenum = c; 
} 

Было бы здорово, хотя, если бы я мог сделать что-то подобное.

void SaveClass(string a, optional string b="UNSET", optional string c="UNSET") 
{ 
    name = a; 
    address = b; 
    phonenum = c; 
} 

Таким образом, я мог бы написать все три перегрузки за один быстрый ход. Есть ли что-нибудь подобное?

Спасибо за любую помощь.

ответ

2

По состоянию на C# 4, вы можете сделать именно это с необязательных параметров:

void SaveClass(string a, string b = "UNSET", string c = "UNSET") 

Тогда при вызове метода, вы можете указать именованные аргументы:

SaveClass("Foo", c: "Some value for C"); 

Или просто использовать позиционные аргументы, которые заполняются по порядку:

SaveClass("Foo", "Some value for B"); 

Именованные аргументы могут использоваться, даже если вы не используете необязательные параметры, что может реально помочь, если у вас много аргументов в вызове метода, и неясно, что именно.

Существуют ограничения: значения по умолчанию для необязательных параметров должны быть постоянными, а необязательные параметры должны быть в конце подписи метода (кроме параметров params), но все ограничения существуют по уважительным причинам.

Одна вещи, чтобы отметить при поиске дополнительной документации - хотя функции должным образом известна как необязательных параметров и именованных аргументы, много статей (в том числе some in MSDN itself) будут говорить о «дополнительных аргументах» и даже «именованных параметры» ,

0

Вы можете это сделать. Просто удалите часть optional из параметра.

Они называются необязательными параметрами. Здесь есть ссылка MSDN: Optional Parameters.

Вы использовать их как это:

void MyFunc(string x, int y = 0) 
{ 
    //do whatever 
} 

Небольшое замечание: это C# 4 или более поздней версии, и все необязательные значения должны быть постоянными, как то, что компилятор делает это на самом деле сжечь их в скомпилированный код. На самом деле это просто синтаксический сахар.

Смежные вопросы