2017-01-11 1 views
-3

Also ich und einige meiner Kollegen bei der Arbeit sind in die Verwendung von Var und warum sollten/sollten wir es nicht verwenden.Ist var ressourcenintensiver als explizit typisierte Variablen?

Ich frage mich, ob var ressourcenintensiver ist als eine explizit typisierte Variable?

Nach meinem Verständnis ist es nur eine sehr dynamische Variable und würde (die gleichen/die gleiche Menge an Ressourcen handeln) als jede andere explizit typisierte Variable des Typs, der an die var übergeben wurde.

Könnte man mit mehr Wissen zu dem Thema bitte näher ausführen?

Vielen Dank im Voraus!

+0

Nein ist nicht, ist nur Sugar-Syntax für Entwickler .. –

+0

'var' ist nicht dynamisch. Beim Kompilieren wird der Typ der Variablen bestimmt. Zur Laufzeit werden keine zusätzlichen Ressourcen verbraucht. –

+0

In den meisten Fällen Var ist auf den spezifischen Typ sowieso kompiliert so nein es ist nicht mehr ressourcenintensiv –

Antwort

2

Var ist nur Syntax Zucker zum expliziten Schreiben des Typs. Das spart Tipparbeit und bedeutet auch, dass Sie die Variablendeklaration nicht aktualisieren müssen, wenn Sie den Zuweisungstyp ändern.

Wenn Sie zum Beispiel den folgenden Code haben:

 var s = "My String"; 

     String t = "My String"; 

Und dann decompile es ILSpy die Tatsache mit, dass s ursprünglich als var verloren erklärt wurde. Wenn der Compiler die IL generiert, stellt er fest, dass die Variable s eine Zeichenfolge ist und ersetzt var durch String.

+0

Muss die Tatsache, dass "S" in der Tat ein String ist nicht kosten Ressourcen beim Start und damit die Zeit für den Start des Programms zu bestimmen bestimmt ist? –

+1

Nein. 'Var' ist ** NICHT ** dynamische Eingabe. Es ist implizit ** STATISCH ** tippen. Genau wie in jeder anderen Sprache mit impliziter statischer Typisierung, sei es ML, Haskell, Scala, C++, Kotlin, Ceylon, Rust, Swift, Java und die unzähligen anderen Sprachen. * Zur Laufzeit passiert nichts. In Sprachen mit einem starken Ganzprogramm-Typ, der auf Unification und Backtracking zurückgreift, * kann * die Kompilierzeit verlangsamt werden, aber die Typrückschlüsse von C∞ sind so grundlegend und trivial, dass ihre Auswirkungen nicht wahrnehmbar sind. Der Compiler muss den Typ des RHS trotzdem berechnen, um zu prüfen, ob die Zuweisung legal ist. –

+0

@chimchillas nein es hat keinen Einfluss auf die Startzeit. Tatsächlich ist die Variable "s" tatsächlich eine Zeichenkette, es ist nur so, dass Sie "var" gesagt haben, also lassen Sie den Compiler das zur Kompilierzeit herausfinden. Die Laufzeit ist genau gleich –

1

Die starke Typisierung von implizit typisierten lokalen Variablen wird zum Zeitpunkt der Kompilierung festgelegt und hat daher keinen Einfluss auf die Leistung Ihrer Anwendung zur Laufzeit.

Das Schlüsselwort var vereinfacht die Aufgabe eines Entwicklers, der vollständige Objektnamen in der Variablendeklaration eingeben muss, und sonst nichts.

Es ist wichtig zu verstehen, dass das Schlüsselwort var nicht "Variante" bedeutet und nicht angibt, dass die Variable lose oder spät gebunden ist. Es bedeutet nur, dass der Compiler den am besten geeigneten Typ ermittelt und zuweist. - 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(); 
     } 
    } 
} 

können Sie sehen, dass sie unabhängig gleich werden. Wenn Sie sich die IL (Intermediate Language - compiled code) anschauten, würden Sie genau den gleichen "Bytecode" sehen. Alles, was Sie tun, ist, den Compiler aufzufordern, es auszuarbeiten. Dieser "Aufwand", den Typus auszuarbeiten, ist nach der Kompilierung nicht mehr vorhanden.

Verwandte Themen