Необязательные аргументы

Проектировщики С# всегда учитывали список запросов пользователей при разработке новой версии языка. С годами необязательные аргументы методов переместились на вершину этого списка. Но до появления С# 4.0 не было достаточно веских причин для их добавления к языку.

В духе повышенной возможности взаимодействия в С# 4.0 появилась концепция необязательных и именованных аргументов (о которых будет сказано в следующем разделе), а также тип dynamic (рассматривается в главе 17). Эти три средства значительно расширили возможности взаимодействия между С# и другими технологиями, такими как СОМ, приблизив язык С# по уровню взаимодействия к Visual Basic.

в С# работают подобно своим аналогам в С++. В объявлении метода для параметра можно указать значение по умолчанию. Любой параметр, не имеющий значение по умолчанию, рассматривается как обязательный. Из этого следует, что все параметры со значениями по умолчанию должны размещаться в конце списка параметров метода.

Рассмотрим следующий пример:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
class TeamMember {
public TeamMember ( string fullName,
string title = "Unknown",
string team = "Unknown",
bool isFullTime = false,
TeamMember manager = null )  {
FullName = fullName;
Title = title;
Team = team;
IsFullTime = isFullTime;
Manager = manager;
}
public string FullName { get; private set; }
public string Title { get; private set; }
public string Team { get; private set;  }
public bool IsFullTime{ get; private set; }
public TeamMember Manager { get; private set; }
}
static class EntryPoint {
static void Main()  {
TeamMember tm = new TeamMember ( "Milton Waddams" );
}
}

В этом примере в объявлении конструктора используются необязательные параметры, и, как видно в методе Main, при инициализации экземпляра TeamMember участвуют ассоциированные необязательные аргументы. Обратите внимание, что все значения параметров по умолчанию являются константами. В качестве значений параметров по умолчанию ничего кроме констант, существующих во время компиляции, указывать не разрешено.

В случае нарушения этого правила компилятор выдаст следующее сообщение об ошибке:

error CS1736: Default parameter value for ‘title1 must be a compile-time constant
ошибка CS1736: Значение параметра по умолчанию для title должно быть константой, существующей во время компиляции

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100