Рекомендуем, 2020

Выбор редакции

Разница между ref и out в C #

«Ref» и «Out» - это модификаторы параметров, используемые в C #. Используя ref и out, вы можете передать любой тип значения по его ссылке на любой метод. Причина передачи любого типа значения по его ссылке представляет основное отличие между ключевым словом ref и out. Ключевое слово ref позволяет вызываемому методу изменять содержимое аргумента, передаваемого ему с помощью ключевого слова ref. Ключевое слово out позволяет вызываемому методу возвращать более одного значения за один вызов. Давайте изучим разницу между ref и out вместе с таблицей сравнения.

Сравнительная таблица

Основа для сравненияссылкаИз
основнойЭто позволяет изменить значение аргумента, используя ключевое слово ref.Это позволяет методу возвращать те значения, которым предшествует ключевое слово out.
инициализацияПараметр ref должен быть инициализирован до вызова метода.Параметр out должен быть инициализирован внутри вызываемого метода до его завершения.
декларацияПараметр, который будет изменен методом, объявляется как ref при объявлении метода и вызове метода.Возвращаемый параметр должен быть объявлен как ref при объявлении метода и вызове метода.

Определение Ref ключевого слова

«Ref» - ​​это модификатор параметра, используемый, когда есть необходимость вызова метода с вызовом по ссылке. Когда мы хотим, чтобы изменения, внесенные в аргументы внутри вызываемого метода, отражались в исходном значении этой переменной, тогда используется модификатор ref ref. Типу значения, которое мы хотим объявить как ref, предшествует ключевое слово «ref» во время объявления метода и вызова метода. При вызове и объявлении метода более одного параметра может быть объявлено как «ref».

 используя Систему; class DemoRef {public void Square (ref int s) {s = s * s; }} class Ref_main {static void Main () {DemoRef ob = new DemoRef (); int a = 10; Console.WriteLine ("вызов метода before:" + a); ob.Square (ref a); // Используется ref Keyword Console.WriteLine ("a after call:" + a); }} // выводим вызов метода before: 10 a вызов метода after: 100 

В приведенном выше коде переменная 'a' передается в качестве аргумента методу Square (ref a) вместе с модификатором параметра ref, прикрепленным к нему. Это означает, что любые изменения, которые метод Square (ref a) будет выполнять для переменной «a» внутри, будут отражаться в исходном значении «a», также вне метода.

Есть некоторые важные моменты, которые следует помнить при работе с модификатором параметра «ref».

  • Аргумент, который вы передаете по ссылке методу, должен быть инициализирован до вызова метода.
  • Метод не должен присваивать начальное значение аргументу ref.
  • Вы также можете использовать ref вместе со ссылочной переменной.

Определение нашего ключевого слова

Каждый раз, когда вы вызываете метод, он возвращает только одно значение. Если вы хотите, чтобы метод возвращал более одного значения при вызове, необходимо использовать ключевое слово «out» вместе с параметрами, которые вы хотите вернуть обратно, когда метод завершается. Иногда бывает так, что когда мы не хотим что-то передавать методу, а хотим, чтобы метод возвращал что-то обратно, мы используем параметры с ключевым словом out. Давайте разберемся с этим на примере.

 используя Систему; class DemoOut {public int Decompose (double x, out double фракция) {int whole_num; whole_num = (int) x; дробь = х - целая_нума; вернуть целое_нум; }} class Out_maint {static void Main () {DemoOut ob = new DemoOut (); int i; двойной ГРП; i = ob.Decompose (100, 125, вне трещины); // использованное ключевое слово Console.WriteLine («Целая числовая часть» + i); Console.WriteLine («дробная часть есть» + frac); }} // выводим целую часть равную 100, дробную часть равную 0, 125 

В приведенном выше коде два значения возвращаются методом Decompose (). Один он возвращает по ключевому слову «return», то есть whole_num, а другой возвращает параметр, которому предшествует ключевое слово out при вызове метода, т.е. «frac».

Важные моменты, которые следует помнить о ключевом слове out.

  • В отличие от ключевого слова ref, параметр, использующий ключевое слово out, не должен инициализироваться до вызова метода.
  • Вызываемый метод сам присваивает значение параметру с ключевым словом out, поскольку оно считается неназначенным внутри вызываемого метода, т.е. предполагается, что оно не имеет начального значения.
  • Вызываемый метод должен присвоить значение параметру out до завершения метода.
  • Ключевое слово out также применимо к ссылочной переменной.

Ключевые различия между Ref и Out в C #

  1. Когда переменная, которой предшествует ключевое слово ref, передается какому-либо методу, изменения, внесенные в нее внутри метода, отражаются в ее первоначальном значении. Когда переменной, переданной методу, предшествует ключевое слово out, метод возвращает его без использования ключевого слова return.
  2. Параметр ref должен быть инициализирован перед передачей в метод. С другой стороны, параметр out должен быть инициализирован внутри метода, которому он передается.
  3. При вызове, объявлении или определении метода параметр ref явно объявляется как ref. С другой стороны, при вызове, объявлении или определении метода параметр out явно объявляется как out.

Заключение:

Всякий раз, когда переменная должна быть передана ссылкой на метод, может использоваться ключевое слово ref и out. Принимая во внимание, что причина использования обоих ключевых слов различна, когда ключевое слово ref может использоваться для изменения значения аргумента, которому предшествует ключевое слово ref, переданное вызываемому методу, а ключевое слово out используется для возврата значения предшествующего аргумента. по ключевому слову out.

Top