18.03.2009, 15:20 Uhr

Vorschau auf C# 4.0 - mehr Komfort für Entwickler

Auf der PDC 2008 wurde Ende Oktober letzten Jahres von Chef-Entwickler Anders Hejlsberg eine erste Vorschau auf C# 4.0 gegeben, das ein Teil des kommenden .NET Framework 4.0 sein wird. Einen ähnlich grossen Sprung wie von Version 2.0 auf Version 3.0 wird es danach aller Voraussicht nicht geben. Die Änderungen werden wohl dosiert und sollen in erster Linie Entwickler von lästigen Routineaufgaben entlasten.
Vorschau auf C# 4.0 - mehr Komfort für EntwicklerAuf der PDC 2008 wurde Ende Oktober letzten Jahres von Chef-Entwickler Anders Hejlsberg eine erste Vorschau auf C# 4.0 gegeben, das ein Teil des kommenden .NET Framework 4.0 sein wird. Einen ähnlich großen Sprung wie von Version 2.0 auf Version 3.0 wird es danach aller Voraussicht nicht geben. Die Änderungen werden wohl dosiert und sollen in erster Linie Entwickler von lästigen Routineaufgaben entlasten.von Hans DürrmeierProgrammiersprachen befinden sich wie Anwendungen in einer stetigen Entwicklungsphase. Vor kurzem feierte C# sein 10 jähriges Jubiläum. Mit der Version 1.0 ging es in erster Linie darum, die generelle Richtung vorzugeben und eine funktional möglichst vollständige und damit möglichst optimale Programmiersprache für das .NET Framework zur Verfügung zu stellen. Mit der Version 2.0 wurden in erster Linie jene Sprachelemente nachgereicht, die es aus Zeitgründen nicht mehr in die Version 1.0 geschafft hatten. Eine der wenigen mit Version 2.0 eingeführten echten Sprachinnovationen waren die Generics. Erst mit Version 3.0 wurde mit LINQ eine Sprachinnovation eingeführt, die die Programmiersprache auf eine neue Ebene hob. Für C#-Entwickler ist die Frage, ob es mit C# 4.0 ähnliche Sprachinnovationen geben wird, daher zur Zeit eine äußerst spannende Angelegenheit.Die Neuerungen und Besonderheiten, die durch dynamische Sprachen wie Python oder Ruby, aber auch durch schon lange vorhandene "Sprachen" wie HTML oder JavaScript, die im Zusammenhang mit Silverlight eine besondere Bedeutung erhalten, die .NET-Welt hineingetragen wurden, machen auch vor C# nicht halt. Ein Motto für C# 4.0 könnte daher "mehr Dynamik" lauten. Anders Hejlsberg formulierte es in seinem PDC-Vortrag so, dass C# 4.0 verschiedene Strömungen dynamischer und deklarativer Sprachen aufnimmt, und das das "Multi-Paradigma" das neue Paradigma ist. Abbildung 1 stellt die wichtigsten Neuerungen zusammen, wobei noch nicht alles mit jener Vorabversion von C# 4.0 ausprobiert werden kann, die seit der PDC zur Verfügung steht.Späte Bindung leicht gemachtMit dem neuen dynamic-Schlüsselwort lassen sich Objektvariablen deklarieren, bei denen der Compiler erst zur Ausführungszeit prüft, ob die angegebenen Methoden vorhanden sind. Damit lässt sich eine späte Bindung deutlich einfacher realisieren als es bislang der Fall war. Grundlage für dieses "Dynamic Lookup" ist die Dynamic Language Runtime (DLR), die Entwicklern von dynamischen Sprachen eine entsprechende Infrastruktur zur Verfügung stellen soll, und die als fester Teil des .NET Framework 4.0 das Fundament von sowohl C# 4.0 als auch Visual Basic 10.0 sein wird. Gegeben seien zwei Klassen K1 und K2, die jeweils eine Methode M besitzen, die in K1 parameterlos und in K2 mit einem string-Parameter aufgerufen wird. Dank des neuen dynamic-Schlüsselwortes lässt sich eine Variable K wie folgt deklarieren:dynamic K = new K1();Intern ist K vom Typ object, aber erweitert mit dynamischen Eigenschaften. Der Aufruf K.M() ruft die Methode M der Klasse K1 auf. Genauso gut kann K aber auch eine Instanz der Klasse K2 zugewiesen werden:K = new K2(); Der Aufruf K.M("Das ist K2")) ruft nun die Methode M der Klasse K2 auf, der ein Parameter übergeben wird. Bislang war diese späte Bindung ein Markenzeichen von Visual Basic, in Zukunft steht sie auch in C# zur Verfügung und wird vor allem für komfortablen Zugriff auf Objekte benötigt, die weniger streng typisierten Sprachen wie Ruby, Python aber auch die PowerShell angelegt wurden, und denen zur Laufzeit weitere Members hinzugefügt werden können. Durch dynamic wird ein statisch typisierte Variable vom Typ dynamic deklariert, deren Typ offen ist (was sich wie ein Widerspruch anhört und in dem PDC-Vortrag von Anders Hejlsberg zu einigem Gelächter der anwesenden Entwickler führte, löst sich bei näherer Betrachtung wieder auf - einen weiteren Lacherfolg erzielte der Microsoft-Chef-Entwickler, der bislang als strenger Verfechter typisierten Codes galt, als er JavaScript-Code aus einer Silverlight 1.0-Anwendung in ein C#-Projekt einfügte und den Code nach ein paar kleineren Änderungen fehlerfrei kompilieren konnte - das neue dynamic-Befehlswort macht es möglich). Mehr Komfort für COMFür viele C#-Entwickler mögen es nur Nebensächlichkeiten sein, für manche erscheinen sie sogar überflüssig, doch dank der mit C# 4.0 neu hinzugekommenen benannten und optionalen Parameter wird der Umgang mit COM-Schnittstellen deutlich einfacher, was sich vor allem in der "Office-Progammierung" angenehm bemerkbar macht und dafür sorgen wird, dass C# in diesem Bereich mit Visual Basic gleichzieht oder sich sogar als die etwas besser geeignete Sprache empfiehlt.Bislang musste z.B. eine Zelle in einem Excel-Tabellenblatt wie folgt angesprochen werden: object missing = System.Reflection.Missing.Value;Ex.Application ExApp = new Ex.Application {Visible = true};Ex.Workbook Wb = ExApp.Workbooks.Add(missing)((Ex.Range)ExApp.Cells[1, 1]).Value2 = 1000;((Ex.Range)ExApp.Cells[1, 2]).Value2 = 2000;Wb.SaveAs("TestMappe", missing, missing, missing, missing, missing, Ex.XlSaveAsAccessMode.xlShared, missing, missing, missing, missing, missing); ExApp.Quit(); Mit C# 4.0 wird alles ein wenig eleganter, da die COM-Interop-Bibliothek mit dynamischen Typinformationen versehen wird: var excel = new Excel.Application() { Visible = true);Excel.Workbook ExWb = excel.Workbooks.Add(); excel.Cells[1,1].Value = 1000;excel.Cells[1,2].Value = 2000;ExWb.Save(Filename: "TestMappe")excel.Quit();Auch das Voranstellen eines ref-Schlüsselwortes bei der Parameterübergabe ist nicht mehr erforderlich. Ein weitere Verbesserung in diesem Bereich hat nur indirekt etwas mit C# zu tun. Wird in den Eigenschaften einer Primary Interop Assembly (PIA) die Eigenschaft EmbedInterop auf True gesetzt, baut der Compiler für jeden Typ, der in der PIA angesprochen wird, einen "Proxy-Typ" in die Assembly ein, so dass die PIA selber nicht mehr mit ausgeliefert werden muss.Co- und Contra-VarianceArrays sind bis C# 3.0 bei Co-Variance nicht typensicher:string[] Namen = GetNamenAsArray();NamenVerarbeiten(Namen);void NamenVerarbeiten(object [] Werte) {Werte[0] = new object();} Diese Variante lässt sich kompilieren, ist aber nicht typsicher, da dem string-Array in der Methode NamenVerarbeiten jeder beliebige Typ "untergejubelt" werden kann. Sie führt bei der Ausführung daher zu einer TypeMismatch-Exception, was insofern nicht ganz logisch ist, da sich string von object ableitet, damit eine "Referenzbeziehung" besteht, und ein object-Typ überall dort eingesetzt werden können sollte wo ein string-Typ erwartet wird. Mit C# 4.0 wird eine solche Zuweisung bei generischen Schnittstellen und Delegaten möglich, wenn die Parameter entweder mit dem out- oder in-Befehlswort deklariert wurden. Über out wird eine sichere Co-Variance ermöglicht, indem dem Compiler mitgeteilt wird, dass der Parameter nur gelesen, aber nicht eingefügt werden soll. Entsprechend wird mit dem in-Befehlswort eine Contra-Variance ermöglicht, in dem der Compiler erfährt, dass der Parameter nachdem er übergeben wurde, danach nicht mehr gelesen wird. In .NET 4.0 werden die Typenparameter wichtiger Schnittstellen wie IEnumerable, und IQueryable mit out und IComparer und IComparable mit in erweitert. Die Parameter des System.Func-Delegaten erhalten sowohl ein in- als auch eine out-Dekoration (System.Func). Nicht geben wird es Co- und Contra-Variance bei Werttypen.Herausforderungen für die ZukunftDie größte Herausforderung einer jeden Programmiersprache für die nahe Zukunft ist die Unterstützung mehrerer Kerne bzw. CPUs. In naher Zukunft dürften jene PCs eine Minderheit darstellen, die nur mit einem Kern auskommen müssen. Durch die Integration der Parallel Extensions in das .NET Framework 4.0 steht eine Unterstützung für Multi-Core-Systeme zur Verfügung, die kaum einfacher sein könnte. Collections bieten bei .NET 4.0 u.a. eine AsParallel-Methode an, mit der eine übergebene Lambda-Funktion parallel ausgeführt wird. Der Namespace System.Linq enthält eine ParallelQuery-Klasse, durch die sich LINQ-Abfragen parallel ausführen lassen. Es ist zu erwarten, dass sowohl C# als auch Visual Basic entsprechende Befehle enthalten werden, mit den sich z.B. Schleifen "parallelisieren" lassen. Abbildung 1: Die wichtigsten für C# 4.0 geplanten Neuerungen in der Übersicht Links[1] Ein Whitepaper von Microsoft zu C# 4.0 - http://code.msdn.microsoft.com/csharpfutureAbbildung 1: Die für C# 4.0 geplanten NeuerungenPeter Monadiemi


Das könnte Sie auch interessieren