Как компилятор C # интерпретирует объекты, указанные в ключевом слове var? - PullRequest
3 голосов
/ 18 февраля 2010

Как компилятор C # интерпретирует объекты, указанные ключевым словом var? Когда мы должны использовать это ключевое слово?

Ответы [ 4 ]

6 голосов
/ 18 февраля 2010

В некоторых случаях вам нужно использовать var, например, при использовании анонимного типа, например в запросе LINQ:

var results = context.People.Select(p => new {p.PersonID, p.Name});

Видите новую строку {} там? Это возвращает класс, который генерируется во время компиляции. Поскольку у этого класса нет имени, единственный способ ссылаться на него в вашем коде - использовать «var». Это избавит вас от необходимости создавать тонны и тонны классов специального назначения только для наборов результатов LINQ.

Независимо от того, используете ли вы var просто как сокращение для другого типа, или если вы используете анонимный тип, вы все равно выполняете статическую проверку типов во время компиляции. Динамические типы не используются. Компилятор в буквальном смысле выясняет, каким должен быть тип при компиляции, поэтому программа выглядит так:

var i = 12;
i = i + "foo!";

не скомпилируется.

4 голосов
/ 18 февраля 2010

var (C # Reference)

Начиная с Visual C # 3.0, переменные, объявленные в области действия метода, могут иметь неявный тип var.Локально типизированная локальная переменная строго типизирована, как если бы вы сами объявили тип, но компилятор определяет тип.

2 голосов
/ 18 февраля 2010

В объявлении Var,

Компилятор выводит тип из присвоенное значение

на

var a = 100;     // compiler assumes a is a integer
var b = "test";  // compiler assumes b is a string

Зачем они нам (почему мы не можем использовать объекты напрямую)

Поскольку объект не обеспечивает безопасность типов

  object objtest = 1;
  objtest = "test";

это отлично работает.

Но var обеспечивает безопасность типов

  var a = 100;    
  a= "test";  

это не компилирует, и даст ошибку времени компиляции.

Где мы можем их использовать

  • Linq-запросы, возвращающие анонимные типы
  • И везде, где вы хотите определить безопасные переменные типа (простота). вместо того чтобы писать как то так.

.

   RootClass rt = new RootClass ();
   List<RootClass > rt = new List<RootClass >();

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

var aaaaaa = new RootClass ();
var ls = new List<RootClass>();
1 голос
/ 18 февраля 2010

Если вы имеете в виду ключевое слово «var», используемое в объявлении переменной, тогда нет такой вещи как «тип var». Этот «var» интерпретируется (во время компиляции) как тип, выведенный из выражения, присвоенного переменной.

...