c # пустые необязательные параметры - PullRequest
1 голос
/ 22 декабря 2011

Например:

void building(int doors, bool multi_story) {...}
or
void building(int doors = 1, bool multi_story = false) {...}

Следовательно:

new building(4, true);
new building(1, false);
or
new building(doors: 4, multi_story: true);
new building();

Thease хорошо работает с обнуляемым типом?также.Однако было бы неплохо сделать это в состоянии сделать это.

new building(doors: 4, multi_story:); // thanks SLaks for the correction

Для обозначения «все по умолчанию, кроме -> имеет 4 двери и является многоэтажным».Удаление одного слова «правда» - это всего лишь маленькая вещь, но возможно ли это смоделировать?

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

Нет;C # не поддерживает такой синтаксис.

Что произойдет, если у вас есть локальная переменная с именем multi_story?

0 голосов
/ 23 декабря 2011

Вы можете создать несколько функций / методов с одним и тем же именем, если сигнатура функции различна в каждой.

, например

public void building() {...}
public void building(int doors) {...}
public void building(bool multiStory) {...}
public void building(int doors, bool multiStory) {...}

для первого выше, что я хотел бы посмотреть на это:

public void building()
{
    building(1); // call building passing default doors
}
public void building(int doors)
{
    building(doors, true); // call the building function passing the default story flag
}
public void building(bool multiStory)
{
    building (1, multiStory); // Call building function passing default doors and ms flag
}
public void building(int doors, bool multiStory)
{
    //final building function - deal with doors & story arguments.
}

Обратите внимание, что вы можете делать такие вещи с Конструкторами объектов класса, используя ключевое слово "this", чтобы вызвать следующий конструктор примерно так:

void building() : this(1) {}
void building(int doors) : this(doors, true) {}
void building(bool multiStory) :this(1, multiStory) {}
void building(int doors, bool multiStory){
    //do stuff
}
0 голосов
/ 22 декабря 2011

Вы можете просто написать:

new building(doors: 4); 

или даже:

new building(4); 

Если вы не укажете параметр, по умолчанию будет указано его значение по умолчанию. Так что multi_story будет false здесь.

...