Для выполнения различных операций в программировании используются разнообразные ключевые слова, аргументы, функции и параметры. Каждый разработчик, работающий с C Sharp, должен быть знаком с out и ref. Они помогают передавать аргументы внутри методов или разнообразных алгоритмов. Знать соответствующие компоненты должен каждый программист.
Далее предстоит получше познакомиться с in out в C Sharp. Также необходимо разобраться, для чего используется ref, что он означает и чем отличается от «аута». Предложенные сведения больше ориентированы на новичков, которые уже имеют поверхностные знания о том, как составляются программные продукты.
Способы передачи аргументов
Источники Google указывает на то, что параметры в методы и функции могут быть переданы несколькими способами:
- по значениям;
- при помощи ссылок.
Наиболее простой вариант – первый. Это «обычный» способ передачи методу тех или иных значений. При работе со ссылками предстоит иметь дело с ref и out, поэтому каждую концепцию необходимо рассмотреть более детально.
Передача по значениям
В Google полно полезной информации о том, как передавать значение переменной в том или ином языке программирования. Первый и элементарный подход – это прямое «присваивание» параметров в методе:
В консоли появится такая запись:
Поисковая система Google указывает на то, что при передаче аргументов методу по значению параметр этого самого метода получает не непосредственную переменную, а ее копию. Именно с ней будет производиться дальнейшая работа. Соответствующий прием помогает добиться реальной независимости от самой переменной.
В приведенном выше примере при обращении к вызову метода Increment будет получена копия переменной number. Также произойдет увеличение значения соответствующей копии. В самом методе Increment показано, что значение параметра n увеличивается на 1, но после выполнения команды переменная number обладает прежним значением – 5. Все это объясняет принцип работы концепции: меняться будет копия, а не непосредственная имеющаяся переменная. Соответствующая информация поможет понять ключевые отличия передачи аргументов по ссылкам.
Передача по ссылкам – ref
В C Sharp аргументы могут передаваться по ссылкам. Для этого используются специальные модификаторы. В качестве них указывается ключевое слово ref, а также out. Далее каждый компонент будет изучен более детально. Это необходимо, чтобы понимать, в чем различие модификаторов.
Первый вариант – ref. Этот модификатор значит, что передача аргументов производится по ссылке перед параметрами. Пример кода:
Результат обработки предложенного выше фрагмента:
Поиск в Google указывает на то, что модификатор ref используется для передачи аргументов по ссылке. Метод в этом случае получит адрес переменной в памяти. Если в нем изменяется значение заданного параметра, сама переменная тоже будет изменена.
Если изучать описание предложенного выше фрагмента, то источники из Google подскажут, что в метод Increment будет передана ссылка на number в памяти. Если n в Increment изменится, это приведет к тому, что поменяется и number. Подобный результат достигается за счет того, что аргумент n и переменная number указывают на один и тот же адрес в памяти.
Стоит обратить внимание на то, что модификатор in ref указывается как перед параметром при объявлении метода, так и непосредственно при вызове метода перед значением, которое передается параметру.
Общая синтаксическая форма
Официальная документация и специализированные сайты из Google помогут разобраться в том, как программистам использовать в коде различные опции и функции, что означает каждая из них, а также в чем заключается разница. Это касается не только сложных алгоритмов, но и способов передачи параметров в методы.
Рассматривая модификаторы ref и in out, нужно не только знать, что означает каждая запись, но и какую форму представления она имеет. Для ref источники Google предлагают пользоваться следующим синтаксисом:
Здесь:
- access – тип доступа к методу (он может быть internal, public, protected и private);
- MethodName – непосредственное имя метода;
- type – тип параметра, обладающий именем param, который будет получать метод;
- return type – тип, который будет возвращаться при обработке алгоритма;
- param – имя формального параметра.
Если такой method будет инициализирован и вызван из другого кода, перед параметром будет тоже ставиться модификатор ref:
Система Google указывает на то, что argument в предложенной форме записи – значение, передаваемое непосредственно в функцию. Он нужен из-за требований, действующих в C#.
Работа со ссылками – модификатор out
Рассматривая ref и out, их отличия и то, что обозначает каждая соответствующая запись, нельзя обойти вниманием выходные значения. Аргументы могут быть не только входными, но и выходными.
Чтобы сделать тот или иной аргумент принадлежащим к соответствующему типу, нужно указать перед ним модификатор in out (double, int, void или любой другой тип информации):
Тут, согласно Google-источникам, результат будет возвращен не посредством return, а при помощи выходной аргумент result. В программе соответствующий прием может быть использован так:
void Sum(int x, int y, out int result)
{
result = x + y;
}
int number;
Sum(10, 15, out number);
Console.WriteLine(number); // 25
Как и в случае с ref, in out используется не только при определении метода, но и при его непосредственном вызове. Соответствующие сведения указаны в Google и официальной документации C#.
Синтаксическая форма
Модификатор out (с integer, double, static void main и иными типами данных) используется, когда нужно обеспечить выполнение сразу двух условий:
- методу не требуется передавать значения;
- метод должен возвращать в обязательном порядке аргумент через параметр.
Существует общая форма представления out. Она поможет понять, в чем заключаются отличия рассматриваемых модификаторов:
Тут:
- access – вид доступа к методу;
- return_type – возвращаемый тип (может быть int I, double и не только);
- type – тип аргумента с именем param, который получит рассматриваемый метод;
- MethodName – имя метода;
- param – имя формального параметра.
Также C Sharp допускает использование сокращенной формы записи out:
Здесь можно увидеть наглядные примеры рассмотренных модификаторов, а лучше разобраться с ними помогут специализированные компьютерные курсы.