Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
//build/ 2014 - Die wichtigsten Neuerungen im Überblick
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15671
Herkunft: BW

Themenstarter:

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

beantworten | zitieren | melden

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 Deviceshttp://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
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3627
Herkunft: Hannover

beantworten | zitieren | melden

"Oh Gott". Das war jedenfalls mein erster Gedanke :)
Zitat
Automatische Initialisierung für Eigenschaften
Das ist ja grausig.
Zitat
Primärkonstruktoren
Wobei das noch ein Stück schlimmer ist...
Zitat
Statische Member können ein Using erhalten
Katastrophal. Das macht doch jeden Code unleserlich...
Zitat
Äußere Deklaration von out fällt weg
Das finde ich ganz nett.
Zitat
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...
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Khalid am .
"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 15671
Herkunft: BW

Themenstarter:

beantworten | zitieren | melden

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.
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

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"];
private Nachricht | Beiträge des Benutzers
Khalid
myCSharp.de - Experte

Avatar #avatar-2534.gif


Dabei seit:
Beiträge: 3627
Herkunft: Hannover

beantworten | zitieren | melden

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)
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

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.
Zitat
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.
Zitat
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]
Zitat
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.
Zitat
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.
Zitat
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
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

Zitat von herbivore
Zitat
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) { }
    }
Fehler
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'.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10070

beantworten | zitieren | melden

Zitat
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.
private Nachricht | Beiträge des Benutzers
Robin0
myCSharp.de - Member



Dabei seit:
Beiträge: 213

beantworten | zitieren | melden

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

*
Zitat
Eine extrem komischre Schreibweise für "?" Operatoren
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10070

beantworten | zitieren | melden

Und was soll das sein?
private Nachricht | Beiträge des Benutzers
BerndFfm
myCSharp.de - Team

Avatar #gvp27cjXxMEZQuCpk4WQ.jpg


Dabei seit:
Beiträge: 3736
Herkunft: Frankfurt a.M.

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10070

beantworten | zitieren | melden

Nö, das liesse sich ja nicht compilieren.
private Nachricht | Beiträge des Benutzers