Laden...

//build/ 2014 - Die wichtigsten Neuerungen im Überblick

Erstellt von Abt vor 10 Jahren Letzter Beitrag vor 10 Jahren 5.734 Views
Abt Themenstarter:in
16.826 Beiträge seit 2008
vor 10 Jahren
//build/ 2014 - Die wichtigsten Neuerungen im Überblick

**C#***Natives Kompilieren (zunächst nur Windows Store Apps) *Roslyn heisst jetzt ".NET Compiler Platform" *Roslyn ist Open-Source (Teil der .NET Foundation) *Automatische Initialisierung für Eigenschaften

public int MyIntProperty { get; set; } = 1;
public byte MyByteProperty { get; set; } = myByteProperty .HasValue ? myByteProperty.Value : 1;
public DateTime MyDateProperty { get; } = DateTime.Now;

*Primärkonstruktoren


// Erlauben die Deklaration eines Konstruktors in der Klassendefinition
class MyClass(string myVal, int? myInteger, MyClassChild child)

Dadurch können die Eigenschaften durch die neue automatische Initialisierung direkt gefüllt werden*Statische Member können ein Using erhalten.
So kann man sich zB das Console vor WriteLine sparen


using System.Console;
WriteLine("Schreib was auf die Console");
ReadKey();

*Äußere Deklaration von out fällt weg

Früher:


Int32 myNumber;
if (Int32.TryParse( anyString, out myNumber))
{
    // verwende myNumber
}

Heute:


if (Int32.TryParse( anyString, out Int32 myNumber))
{
    // verwende myNumber
}

*Erweiterung von try-Catch mit Conditions

Int32 myDivider = 0;
try
{
    var myResult = myValue / myDivider ;
}
catch (Exception e) if ( myDivider == 0 )
{
    Console.WriteLine( "Devider is 0: " + e.Message );
}
catch (Exception e) if ( myDivider  != 0 )
{
    Console.WriteLine( "Other Error: " + e.Message );
}

*Catch kann mit await kombiniert werden *Gewisse Abfragen sollen noch vereinfacht werden (zB verkürze if-Schreibweise soll weiter verkürzt werden) *Die Endspezifikation steht noch nicht fest.

Azure*Neues Portal im Kachel-Stil und Touch-Unterstützung *Unterstützung von Java *Kostenlose SSL Zertifikate für alle Azure Produkte *Continous Deployment von Checkin bis Roll-out *Condition Monitoring der gesamten Azure-Familie *Live-Debugging in der Cloud *Scripted Web-Jobs (Consolen-Anwendung (oder batch, powershell, ruby...) mit direkter Integration in eine Webanwendung ohne ServiceBus) und Staging *Direkte VM-Erzeugung aus Visual Studio *Verwalten und Erstellen beliebiger VMs inkl Snapshot-Funktionen *Auto-Scaling *Traffic Manager (Lastverteilung Regionsbezogen) *Auto-Backup mit Webseiten mit Datenbanken *SQL Max-DB Site von 150GB auf 500GB erhöht *SLA auf 99,95% erhöht *Man braucht den Microsoft-Support nicht mehr wenn man Datenbanksicherungen benötigt *Automatische Replikation von Datenbanken in andere Regionen

Ich hatte gestern das Glück und kam in der Azure-Evangelisten/Developer-Fragerunde tatsächlich durch.
Meine Frage, wann Azure für kleinere Startups finanziell Attraktiv wird und ein klareres, kalkulierbares Preissystem bringt wurde leider nicht zufriedenstellend beantwortet.
Es bleibt - obwohl sich das ein Großteil des Azure-Community wünscht - erst mal alles pure Schätzung und macht es damit Startsups ohne Investoren weiterhin nicht einfach.
Nachvollziehbar, welche CPU-Zeit berechnet wird und wann die Anwendung aktiv ist, wird es weiterhin nicht sein.

Windows 8.1*Das Startmenü kehrt zurück *Universal-Apps für alle Windows 8 Produkte *Updates bald nur noch für 8.1 und nicht mehr 8.0 *Bessere Integration in Unternehmen (Store Apps, Enterprise VPN, Policies) *Hardwareanforderungen wurden gesenkt

Windows Phone 8.1*Native Apps *Bessere Performance der Apps *Xamarin liefert Teile an die neu gegründete .NET Foundation *IE11 mit 200Hertz (OpenGL) *Direktwechsel von Telefon- zu Videogesprächen *Lizenzkosten fallen weg *Sprachsteuerung Cortana (in Deutschland ab 2015) *Bessere Integration in Unternehmen (Store Apps, Enterprise VPN, Policies)

Windows on Devices
http://www.windowsondevices.com/*Völlig neue Schiene für SoC mit Windows (RasperryPI-Like)

ASP.NET*"One ASP.NET": Vereinigung aller ASP Versionen(Dynamic Data, MVC, WebForms) inklusive Scaffolding (Code Generierung) *Bessere Integration von EF in ASP.NET *ASP.NET Identity wurde überholt *Live-Editing von VS und Browsern *SignalR ohne jQuery *SignalR for Android *Neues WebEssentials mit vielen Änderungen (Modern IntelliSense Web, SASS, CoffeeScript, WebVtt, TypeScript, AppCache) *TypeScript Release als 1.0 *Neues Online Vision Studio mit ASP- und HTML-Support mit dem Namen "Visual Studio Online Monaco" *Viele neue Assistenten für ASP in der Cloud *Sprite Generierung Ad-Hoc *Debugger Attaching für Microsoft Azure *IntelliSense für AngularJS und Knockout *Neuer Editor für Json

Weiteres*Neues Tool "AppStudio" mit den Webseiten in eine App umgewandelt werden können *Werkzeug WebMAP2 kann Windows Forms Anwendungen in HTML5/JS-Anwendungen transferieren (danke für den Hinweis pdelvo) *Visual Studio Online verfügbar für alle

3.511 Beiträge seit 2005
vor 10 Jahren

"Oh Gott". Das war jedenfalls mein erster Gedanke 😃

Automatische Initialisierung für Eigenschaften

Das ist ja grausig.

Primärkonstruktoren

Wobei das noch ein Stück schlimmer ist...

Statische Member können ein Using erhalten

Katastrophal. Das macht doch jeden Code unleserlich...

Äußere Deklaration von out fällt weg

Das finde ich ganz nett.

try-Catch mit Conditions

Warum? Da finde ich ein typisches


catch (Exception e)
{
  if (myDivieder == 0)
  // Bla Bla Bla
}

wsentlich angenehmer zu lesen.

Die try..catches mit async await könnten ganz nett werden. Aber was wird man sehen. Bis jetzt geht es auch ohne ganz gut.

Neben den genannten wird momentan noch über weitere "Features" debattiert. Unter anderem eine Binärschreibweise


int x = 0b00100110;

Eine extrem komischre Schreibweise für "?" Operatoren


var kunde = GetKunde();
string name = (kunde == null) ? null : kunde.Name;

wird zu

var name = GetKunde()?.Name;

Also, dass Roslyn jetzt Open-Source ist, finde ich persönlich sehr gut. Meine Befürchtung ist nur, dass jetzt "jeder" seine sich schon immer gewünschten Sprachfeatures einbauen könnte. Ich hoffe c# verkommt nicht zu einem "Syntax-Ungeheuer"...

Edit:
Ansonsten sind alle gezeigten Dinge auf der Build schon sehr beeindruckend. Die ASP.NET Änderungen finde ich spannend. Native Builds erhoffe ich mir später auf Desktops. Die Updates für Windows und Windows Phone sind sehr vielversprechend. Im Großen und Ganzen bin ich sehr positiv eingestellt für die Zukunft als .NET Entwickler.

So, und momentan bin ich angefressen, da mein Company Azure Account sich nicht mehr öffnen lässt und immer nur mein privater Live Account angezeigt wird. Ich komm an meine vorhandenen Sites nicht mehr ran. Mein VS Online ist weg. Usw...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

Abt Themenstarter:in
16.826 Beiträge seit 2008
vor 10 Jahren

Ich finde die Neuerungen eigentlich ganz gut.
Nimmt etwas den Overhead aus der Sache; fördert etwas das Rapid Development und geht in Richtung Ruby, auch wenn es alles andere als Übersichtlich ist, wenn man es nicht gewohnt ist.

Bei mir funktioniert Azure sowohl mit meinem privaten wie auch mit meinem "onmicrosoft"-Account.
Nur das neue Portal ist bei mir auch noch nicht aktiv und Free-SSL steht bei mir auch noch nicht zur Auswahl.

1.346 Beiträge seit 2008
vor 10 Jahren

Automatische initialisierung von Eigenschaften finde ich generell ziemlich gut, allerdings sieht die Syntax "falsch" aus. Ich finde ein = nach einer schließenden Klammer ziemlich seltsam.

An die Syntax für Primärkonstruktoren kann man sich gewöhnen, auch wenn man da ganz grausige Dinge tun kann:


public class Foo(public string bar){ }

ist äquivalent zu:


public clas Foo
{
    public string bar;

    public Foo(string bar)
    {
        this.bar = bar;
    }
}

Usings für Statische Member find ich auch ziemlich grausig. Werde ich auf jedenfall nicht benutzen.

Und das out Feature ist eigentlich nur ein Spezialfall vom Eigentlichen Feature.

Zuweisungen können nun aus Ausdrücke verwendet werden.

Folgendes geht jetzt:


int i = int j = 5;
Foo(int x = 6);
//usw

try catch mit Conditions ist auf den ersten blick überflüssig, aber gar nicht so verkehrt. Denn die Conditions verfälschen nicht den Call Stack.

Binärschreibweise ist praktisch. Es wird auch noch über etwas anderes debatiert. Und zwar über das Gruppieren in diesen literalen:

0x0101_1010
So kann man Zusammengehörige Flags gruppieren. Man kann beliebig viele unterstriche benutzen.

Weitere Features:

Listen können nun mit dem Listensyntax erstellt werden, wenn die Add Methode eine Erweiterungsmethode ist:


MyClass x = new MyClass(){"a", "b", "c"}; // wenn es eine Erweitungsmethode für Add gibt

Dictionaries können übersichtlicher angelegt werden


var dic = new Dictionary<string, string>
{
    ["x1"] = "y",
    ["x2"] = "y",
    ["x3"] = "y"
};

Und das schrecklichste:


var dic = new Dictionary<string, string>
{
    $x1 = "y",
    $x2 = "y",
    $x3 = "y"
};

Das ist auch völlig äquivalent zum verherigen.
Ganz schlimm:


var dic = new Dictionary<string,string>{...};
string result = dic.$x1; 
//Ist äquivalent zu
string result = dic["x1"];

3.511 Beiträge seit 2005
vor 10 Jahren

Muss ich jetzt nicht verstehen. Auf meinem Win 8 Rechner zeigt er mir das korrekte Azure Portal an (Corporate Account). Auf meinem noch Win 7 Rechner, kommt der falsche Inhalt...

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo zusammen,

grundsätzlich sehe ich die Gefahr, dass die C#-Syntax mit Spezialitäten überfrachtet wird, auch wenn einige der Spezialitäten sicher gar praktisch sind, z.B. die Möglichkeit automatische Properties direkt zu initialisieren und Variablen innerhalb von Ausdrücken direkt zu deklarieren.

Denn die Conditions verfälschen nicht den Call Stack.

Der Sinn der bedingten catch-Statements erschließt sich mir allerdings noch nicht. Auch kann ich die Behauptung bezüglich des CallStacks nicht nachvollziehen. Ein catch befindet sich, egal welche Kontrollstrukturen darin verwendet werden, innerhalb der Methode und damit innerhalb desselben StackFrames.

Listen können nun mit dem Listensyntax erstellt werden, wenn die Add Methode eine Erweiterungsmethode ist

Die Möglichkeit, Listen mit der Listensyntax zu initialisieren, ist m.E. nicht neu. Ich denke, das geht schon jetzt. Und ich denke, dass es reicht, wenn eine passende Add-Methode vorhanden ist~~, egal ob direkt in der Klasse oder als Erweiterungsmethode.~~ [EDIT]Ich hatte den Satz falsch gelesen. Jetzt ist mir klar: Die Neuerung besteht darin, dass die Listensyntax auch dann funktioniert, wenn Add eine Erweiterungsmethode ist. Bisher musste Add eine Instanzmethode sein. Damit gilt der gestrichene Halbsatz doch erst mit der neuen C# Version.[/EDIT]

Zuweisungen können nun aus Ausdrücke verwendet werden. Zuweisungen konnten schon immer als Ausdrücke verwendet werden. Das neue scheint mir zu sein, dass jetzt Variablendeklarationen bzw. -initialisierungen als Ausdrücke verwendet werden können.

Dictionaries können übersichtlicher angelegt werden

Obwohl ich mir als bekennender Dictionary-Fan schon oft gewünscht habe, dass man diese in C# so komfortabel wie in Perl die Hashes benutzen kann, und mir daher vorstellen kann, die neue Syntax zu verwenden, stößt mir hier die Verwendung von barewords (die ich auch in Perl nicht mag und nicht verwende) und die Verwendung eines neuen Sonderzeichens ($) auf.

Eine extrem komischre Schreibweise für "?" Operatoren

Die Syntax myObject?.Name scheint mir weniger als Abkürzung für die bedingte Bewertung gedacht zu sein, sondern eine einfache Möglichkeit, über Variablen, die potenziell null sind, ohne die Gefahr einer NullReferenceException auf Member zuzugreifen. So wie ich es verstehe, liefert der Ausdruck einfach null, wenn myObject.Name (also ohne das Fragezeichen) eine NullReferenceException werfen würde.

Einige nette Neuerungen sind dabei. Bei einige Neuerungen erschließt mich mir - wie beschrieben - der Sinn noch nicht so ganz.

herbivore

1.346 Beiträge seit 2008
vor 10 Jahren

Listen können nun mit dem Listensyntax erstellt werden, wenn die Add Methode eine Erweiterungsmethode ist
Die Möglichkeit, Listen mit der Listensyntax zu initialisieren, ist m.E. nicht neu. Ich denke, das geht schon jetzt. Und ich denke, dass es reicht, wenn eine passende Add-Methode vorhanden ist, egal ob direkt in der Klasse oder als Erweiterungsmethode.

Habe es gerade ausprobiert. Folgendes kompiliert nur mit dem neuen Roslyn Kompiler und gibt einen Compilerfehler mit dem alten:

    public class MyClass : IEnumerable<string>
    {
        static void Main(string[] args)
        {
            var temp = new MyClass { "a", "b" };
        }
        public IEnumerator<string> GetEnumerator()
        {
            throw new NotImplementedException();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            throw new NotImplementedException();
        }
    }

    public static class Extension
    {
        public static void Add(this MyClass cls, string test) { }
    }

Fehlermeldung:
Program.cs(14,37): error CS0117: 'MyClass' enthält keine Definition für
'Add'.
Program.cs(14,41): error CS0117: 'MyClass' enthält keine Definition für
'Add'.

F
10.010 Beiträge seit 2004
vor 10 Jahren

Eine extrem komischre Schreibweise für "?" Operatoren

Das ist auch eher für Objektketten gedacht.


return currentCustomer?.Adress?.City;

Anstatt


if((currentCustomer != null) && ( currentCustomer.Adress != null))
    return currentCustomer.Adress.City;

return string.empty;

Da finde ich ersteres schon deutlich augenschonender.

R
212 Beiträge seit 2012
vor 10 Jahren

Das war ja klar, das was mir am besten gefällt* gibts nur in VB -.-'

*

Eine extrem komischre Schreibweise für "?" Operatoren

F
10.010 Beiträge seit 2004
vor 10 Jahren

Und was soll das sein?

3.825 Beiträge seit 2006
vor 10 Jahren

Fzelle : Müsste es nicht so heissen :


if (currentCustomer != null)
    if (currentCustomer.Adress != null)
        return currentCustomer.Adress.City;
return string.empty;

Die ?-Kurzschreibweise finde ich auch gut.

Am 24. April gibt es eine Online Konferenz zu den Themen auf der build : Auf //build folgt //learn.

Am 06.05. gibt es in Frankfurt bzw. Bad Homburg eine Usergroup Session mit dem Thema 'build 2014'.

Grüße Bernd

Edit : Falsche Klammer weggemacht.

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

F
10.010 Beiträge seit 2004
vor 10 Jahren

Nö, das liesse sich ja nicht compilieren.