2017-01-11 2 views
-3

Так что я и некоторые мои сверстники на работе ищут использование var и почему мы не должны/не должны его использовать.Является ли var более ресурсоемким, чем явно типизированные переменные?

Мне было интересно, если var более ресурсоемкий, чем явно типизированная переменная?

По моему мнению, это просто ОЧЕНЬ динамическая переменная и будет (действовать одинаково/использовать одинаковое количество ресурсов), как и любую другую явно типизированную переменную типа, переданного в var.

Мог ли вы получить больше знаний по этому предмету, пожалуйста, уточните?

Заранее благодарен!

+0

nope не является, это только синтаксис сахара для разработчиков. –

+0

'var' не является динамическим. В классе компиляции определяется тип переменной. Никакие дополнительные ресурсы не потребляются во время выполнения. –

+0

В большинстве случаев var скомпилирован для определенного типа в любом случае, так что нет, это не более интенсивный ресурс. –

ответ

2

Var - это просто синтаксический сахар для явного написания типа. Это избавляет вас от типизации, а также означает, что если вы измените тип назначения, вам не нужно обновлять объявление переменной.

Например, если у вас есть следующий код:

 var s = "My String"; 

     String t = "My String"; 

А затем декомпилировать его, используя ILSpy тот факт, что s первоначально был объявлен как var теряется. Когда компилятор генерирует IL, он понимает, что переменная s является строкой, поэтому заменяет var на String.

+0

Имеет ли значение тот факт, что «s» действительно является строкой, а не затратами ресурсов при запуске и тем самым продлевает время запуска программы? –

+1

№ 'var' is ** NOT ** динамическая типизация. Это неявное ** STATIC ** типизация. Точно так же, как на любом другом языке с неявным статическим типированием, будь то ML, Haskell, Scala, C++, Kotlin, Ceylon, Rust, Swift, Java и многие другие языки. * Ничего не происходит во время выполнения. В языках с мощным умозаключением целой программы с унификацией и возвратом, он * может * замедлить время * компиляции *, но вывод типа C is настолько прост и тривиальен, что его влияние незаметно. Компилятор должен все равно вычислить тип RHS, чтобы проверить, является ли назначение законным. –

+0

@chimchillas нет, это не влияет на время запуска. Фактически переменная «s» действительно является строкой, просто вы сказали «var», чтобы вы позволили компилятору понять это во время компиляции. Скорость выполнения точно такая же –

1

Сильная типизация неявно типизированных локальных переменных определяется во время компиляции и, следовательно, приводит к нулевому влиянию на производительность вашего приложения во время выполнения.

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

Важно понимать, что ключевое слово var не означает «вариант» и не указывает, что переменная свободно набрана или поздняя. Это просто означает, что компилятор определяет и присваивает наиболее подходящий тип. - Implicitly Typed Local Variables (C# Programming Guide)

0
using System; 

namespace ConsoleApp 
{ 
    class Program 
    { 
     static void Main() 
     { 
      var stringImplicit = "Blah"; 
      string stringExplicit = "Blah"; 

      Console.WriteLine("IMPLICIT : {0} - {1}", stringImplicit, stringImplicit.GetType().Name); 
      Console.WriteLine("EXPLICIT : {0} - {1}", stringExplicit, stringExplicit.GetType().Name); 

      Console.ReadKey(); 
     } 
    } 
} 

Вы можете видеть, что они становятся одинаковыми независимо. Если вы посмотрите на IL (Intermediate Language - скомпилированный код), вы увидите точно такой же «байт-код». Все, что вы делаете, это попросить компилятор его обработать. Это «усилие» разработки типа больше не появляется после компиляции.

Смежные вопросы