Программирование PC Ключевое слово var на C# Thu, November 21 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Ключевое слово var на C# Печать
Добавил(а) microsin   

Ключевое слово var ссылается на тип неявным способом. Это псевдоним любого типа. Реальный тип определит компилятор C#. Использование var никак не ухудшает производительность. Var это отличный (и вкусный) синтаксический "сахар". Он делает программы короче и проще для чтения. Var может использоваться в коде методов и в теле циклов. Ключевое слово var может представлять любой тип, и какой это будет тип определяется во время компиляции. После компиляции результат получится тот же самый, как если бы тип был точно указан.

Рассмотрим примеры применения ключевого слова var. Ниже показано использование var в трех контекстах.

Примечание: для компиляции этой программы Вы не можете использовать старую версию .NET Framework (используйте .NET 2017).

using System;
using System.Collections.Generic;
using System.Linq;
 
class Program
{
   public static void Main()
   {
      // 1.
      // var доступно всегда, не только в Linq.
      var cat = new List< int>
      {
         1,
         2,
         7,
         9
      };
      // Наведите курсор на ключевое слово 'var', и Visual Studio
      // скажет Вам какой реально тип здесь используется.
 
      // 2.
      // Этот пример отображает нечетные числа.
      // Возвращает IEnumerable< T> (где T это int).
      var items = from item in cat
                  where (item % 2 == 1)
                  select item;
 
      // 3.
      // Каждый элемент имеет тип int.
      foreach (var item in items)
      {
         Console.WriteLine(item);
      }
      // Предыдущий цикл такой же, как и предыдущий:
      foreach (int item in items)
      {
         Console.WriteLine(item);
      }
   }
}

Вывод:

1
7
9
 
1
7
9

Этот код использует ключевое слово var и тип List. Переменная известна как List. Таким образом, var относится к List элементов типа int. 

Примечание: Вы можете навести курсор мыши на var, и среда Visual Studio подскажет, что это тип List. Эта функция называется IntelliSense. 

В этом примере также показан запрос к элементам var, который возвращает IEnumerable< int>. Выражение запроса вычисляется для этого типа, и var неявно относится к этому типу.

Вы можете использовать var в цикле foreach - как Вы видите в этом примере, он работает точно так же, как или любая другая переменная.

Системы обработки типов. Язык C# использует строгий контроль типов. Области памяти помечены информацией о том, какие типы объектов в них содержатся. Строгий контроль типов помогает повысить качество кода. Компилятор C# будет выдавать ошибки и предупреждения, потому что хочет, чтобы Ваш код работал правильно. В случае var он анализирует код, и выводит из него тип переменной.

Ограничения. Вы не можете назначить var в значение null. Это приведет к предупреждению CS0825. Также Вы не можете использовать var в качестве типа параметра или возвращаемого значения метода.

Реализация. Давайте посмотрим на поведение реализации кода C#, который использует ключевое слово var. Реальное поведение кода C# отражает промежуточный язык (IL, Intermediate Language). Код IL можно посмотреть с помощью утилиты IL Disassembler, предоставляемой Visual Studio. В примере используются два значения типа int32, и эти два значения на IL абсолютно одинаковые, хотя одна декларация использует var, а другая int. Подсистема выполнения кода ничего не знает о том, что программист использовал var. Таким образом переменная, определенная с ключевым словом var, будет работать точно так же эффективно, как и переменная, определенная с явным указанием типа наподобие int или string.

public int ReturnValue()
{
   var a = 5;
   int b = 5;
 
   return a + b;
}

Код IL этого метода:

.method public hidebysig instance int32  ReturnValue() cil managed
{
   // Code size       9 (0x9)
   .maxstack  1
   .locals init ([0] int32 result,
                 [1] int32 CS$1$0000)
   IL_0000:  nop
   IL_0001:  ldc.i4.5
   IL_0002:  stloc.0
   IL_0003:  ldloc.0
   IL_0004:  stloc.1
   IL_0005:  br.s       IL_0007
   IL_0007:  ldloc.1
   IL_0008:  ret
} // end of method VarKW::ReturnValue

Использование. Ключевое слово var полезно не только на обычных типах. Ниже показан тип Dictionary, использующий подробный синтаксис - много скобок, букв и запятых. Var позволяет опустить длинные списки типов параметров, что может улучшить читаемость кода. Var часто упрощает ревизию/переработку (refactoring) кода.

Примечание: когда при рефакторинге Вы меняете имя типа, то локальный тип var не нуждается в замене.

// Программа C#, использующая var для типа Dictionary.
using System;
using System.Collections.Generic;
 
class Program
{
   static void Main()
   {
      // Использование ключевого слова var для создания экземпляра Dictionary.
      // Затем используем саму коллекцию.
      var data = new Dictionary< string, int>();
      data.Add("cat", 2);
      data.Add("dog", 1);
      Console.WriteLine("cat - dog = {0}",
                        data["cat"] - data["dog"]);
   }
}

Вывод:

cat - dog = 1

Общие выводы. Var полезное ключевое слово. Оно похоже на #define или typedef языка C++. Мы используем var для краткости, это делает код проще для понимания. В некоторых случаях var может запутать, тогда используйте здравый смысл для организации кода.

[Ссылки]

1. var keyword site:dotnetperls.com.
2. var (справочник по C#) site:docs.microsoft.com.

 

Комментарии  

 
-1 #1 Iryna K 23.02.2021 14:28
Спасибо! Очень интересно и подробно описано. С первого раза! :lol:
Цитировать
 

Добавить комментарий


Защитный код
Обновить

Top of Page