VS2008 – C# Compiler Erweiterungen

Bei einigen der unter C# 3.0 Spracherweiterungen geführten Dinge handelt es sich mehr um Compilererweiterungen des C# Compilers der mit Visual Studio 2008 ausgeliefert wird, als um echte Spracherweiterungen für C#.

So funktionieren die nachfolgenden Erweiterungen auch dann wenn man Code für das NET Framework 2.0 erzeugt:

  • Implizit typisierte lokale Variablen
  • Objekt Initialisierer
  • Anonyme Typen
  • Automatische Eigenschaften

Wenn diese Dinge „Spracherweiterungen“ und nicht „Compilererweiterungen“ wären, dann wäre es nicht möglich ein Programm welches diese Feature verwendet für das NET 2.0 Framework zu erstellen und auf einem Rechner mit „nur“ installiertem NET 2.0 Framework  auszuführen.

Hier ein Beispiel, welches ich mit VS2008 als Konsolenanwendung für den Framework 2.0 erstellt habe und auf einem Rechner mit NET 2.0 Framework ausgeführt habe:

class Program
{

    // Automatische Eigenschaften
    static public double AutoDouble { get; set; }

    // Klasse zur Verwendung mit Objekt Initialisierung ohne Konstruktoren
    public class Address
    {
        public string Name { get; set; }

        public string Street { get; set; }

        public int ZIP { get; set; }

        public string City { get; set; }

        public override string ToString()
        {
            return this.Name + "," + this.Street + "," + this.ZIP + "," + this.City ;
        }
    }

    static void Main(string[] args)
    {
        // Implizit typisierte lokale Variable
        var i = 10;

        // Verwendung der Eigenschaft AutoDouble 
        AutoDouble = 12.22;

        // Anonymer Typ
        var figur = new { Name = "Rechteck", Breite = 1024, Hoehe = 768 };

        // Objekt Initialisierung mit Feldbezeichnungen ohne Konstruktor
        Address adr = new Address { Name = "Max Musterman", Street = "Platanenweg", ZIP = 4711, City = "Musterhausen" };

        // Ausgabe der Werte
        Console.WriteLine(i.ToString());
        Console.WriteLine(AutoDouble.ToString());
        Console.WriteLine(String.Format("Die Adresse lautet {0}",adr.ToString()));
        Console.WriteLine(String.Format("Hier der anonyme Typ figur {0}",figur.ToString()));

        Console.Read();
    }

}

Nicht von diesem Beitrag betroffen sind die echten Spracherweiterungen von C# 3.0 wie:

  • Erweiterungsmethoden
  • Lambda Expressions
  • LINQ

Diese erfordern aber das die Programme für das NET 3.5 Framework erstellt werden.

Ein Gedanke zu „VS2008 – C# Compiler Erweiterungen“

  1. Ich meine hier geht "Sprache" und "Framework" durcheinander.
    Ein Compiler übersetzt eine Sprache in eine andere Sprache. In unserem Fall wird C# nach IL übersetzt. Die Spracherweiterungen von C# 3.0 werden vom Compiler in IL übersetzt, ohne dass dazu der Umfang von IL erweitert werden musste. Dennoch bleiben es Spracherweiterungen.
    Bei den Spracherweiterungen muss man unterscheiden zwischen solchen die mit dem Framework 2.0 laufen, und solchen die 3.5 benötigen. Deine oben aufgeführten Beispiele laufen mit .NET 2.0, LINQ nicht.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.