Zum Inhalt springen

Offene Trainings – Windows Store Apps im Jänner 2015

2015_Training

Seit heuer gibt es auf meiner Website neben Firmentrainings auch die Möglichkeit offene Trainings zu buchen.

Direkt auf der Homepage stehen da gleich die nächsten Termine in Wien. Das startet gleich ganz spannend, der besten Vorbereitung auf Windows 10: Windows Store Apps.

Am 19.1. Windows Store Apps mit XAML und C#. C# Kenntnisse werden dabei vorausgesetzt. XAML Wissen hilft ist aber nicht Voraussetzung. XAML wird zwar auch (abhängig der Teilnehmervorkenntnisse) erklärt, es geht aber vor allem um Windows Store App Spezifika, wie z.B. die Windows Runtime und den App-LifeCycle. Spezifische Windows Store App Controls wie die AppBar, modernes Design, Tiles and Toasts und natürlich contracts wie sharing sind wichtige Themen.

In der Woche darauf ab 26.1. geht es mit Advanced Themen weiter – Advanced Windows Store Apps. Wenn Sie bis jetzt keine Windows Store Apps programmiert haben, würde ich den erstgenannten Kurs empfehlen. Im Advanced Kurs geht es dann nur um Spezialthemen wie z.B. Animationen, Globalisierung, Storage Optionen, Printing, Play To, Windows Push Notifications, Background Tasks, Sensoren, Camera… Und das mit C# und XAML oder JavaScript und HTML.

Bei Sonderwünschen gibt es natürlich auch im Kurs Flexibilität 🙂

Es würde mich freuen Sie/Dich bei einem dieser Kurse zu sehen 🙂

Christian

http://www.cninnovation.com

An Awesome Year 2015

Das wird ein „awesome“ Jahr 2015 🙂

???????????????????????????????????????????????????????????????????????????

Warum „awesome“?

Windows 10

Am 21. Januar sehen wir ein „awesome“ Windows 10. Zumindest heißt der Build so: FBL_AWESOME, aber ich denke es ist wirklich „awesome“.

Das nächste Kapitel zu Windows 10 bringt neue Consumer-Features! Ich bin schon gespannt 🙂

Professional C# 6

Ich arbeite an der 10. Edition von Professional C#. Ja, bereits die 10. Edition! Die erste Ausgabe gab es im Jahr 2002 mit der Beta 2 von .NET 1.0. Seitdem hat sich in .NET viel getan. Besonders viele Änderungen kommen jetzt aber mit .NET 2015.

Die neue Ausgabe wird ein größeres Update dieses Buches mit weniger Seiten. Die aktuelle Auflage kommt mit 1560 Seiten aus. Für .NET 2015 gäbe es die Möglichkeit das auf 2500 Seiten auszudehnen. Ich entschied mich aber stattdessen die viele alte Technologien loszuwerden und die Seitenanzahl zu reduzieren. In der neuen Edition gibt es dann nur neue Technologien wie z.B. ASP.NET 5 aber nicht die alte Version von ASP.NET MVC Web API…

Bitte Professional C# 5 für alle alten Technologien zu Rate ziehen! Windows Forms ist aber auch da nicht mehr drinnen. In welcher Edition gab es das zuletzt?

Die Neuauflage des Buches umfasst die neuen Sprachfeatures von C#, die neue .NET Core Runtime, ASP.NET 5, Windows Universal Runtime Apps (oder was dann auch immer der Name sein wird) für Windows 10…

Viele Beispiele des Buches werden nicht nur unter Windows sondern auch unter Linux und Mac laufen (natürlich nicht die Kapitel zu Windows Universal Apps).

Windows Azure

Woche um Woche gibt es bei Windows Azure neue Features.

Alle meine Webseiten laufen mit Windows Azure Websites. Für den Storage verwende ich SQL Database und Blob Storage. Meine Apps verwenden Windows Azure Mobile Services sowie die Bing Search API aus dem Azure Marketplace.

Für meinen Sourcecode nutze ich Visual Studio Online (mit Git), meine Office Suite kommt über Office 365.

Aktualisierte Versionen meiner Apps (werden bald released, aber Datum verspreche ich keines) nutzen DocumentDB und Azure Search.

Einige wichtige Termine zu Windows Azure:

Bitte dieses Datum für Windows Azure in Wien freihalten: 12-Februar! Weitere Informationen folgen in Kürze!

Bei der BASTA! in Darmstadt (24 – Februar) habe ich eine Session über Storage Optionen mit Windows Azure. Das sollte eineige Unklarheiten beseitigen und bei Entscheidungen helfen.

Apps

Eine neue Version von Picture Search ist in Arbeit. Die neue Version kommt nicht nur für Windows, sondern auch für Windows Phone, iPhone und Android! Außerdem werde ich die kostenlosen Limits erhöhen. Für all diese Plattformen setze ich Xamarin ein.

 Menu Card und Kantine sind weitere Apps, die für mehrere Plattformen kommen. Menu Card bekommt ein komplettes Rewrite am Server und viele neue Features am Client.

Kurse, Workshops

Wie in den Vorjahren mache ich auch weiterhin Programmierkurse und Workshops. Neue Technologien wie C# 6, .NET Core, ASP.NET 5 und Windows 10 Apps sind da natürlich ein heißes Thema. Bei Xamarin.Forms erhoffe ich auch viele Teilnehmer.

Auf meiner Website ist neu dass da nicht nur Firmen-Workshops zu finden sind. Jetzt kann man sich auch direkt zu offenen Kursen registrieren. Im Jänner startet das mit Windows Store Apps mit XAML und C# und Advanced Windows Store Apps mit C# und JavaScript.

Ich hoffe viele von euch dieses Jahr zu sehen!

Ein glückliches und gesundes Neues Jahr allen meinen Lesern!

Christian

CN innovation

Bild © Ivelinr |  Dreamstime.comAwesome Evaluation Form Photo 

XAML Workshop in Wien

Kurzfristig noch an einem XAML Workshop mit WPF und Windows Store Apps Interesse? 1. bis 5. Dezember in Wien. Wir behandeln da das wichtigste sowohl zu WPF als auch zu Windows Store Apps – mit C# und XAML. Programmierkenntnisse mit C# und .NET sollten vorhanden sein. Themen werden wie bei meinen Workshops üblich noch im Kurs an die Teilnehmerwünsche angepasst.

Das sind die Inhalte:

  • Einführung in XAML
  • Unterschiede zwischen Desktop Apps und Windows Store Apps
  • Universal Apps
  • Design Guidelines
  • Controls
  • Layout Controls
  • Commands
  • Styles, Templates, Resources
  • Data Binding
  • Navigation
  • Printing
  • Documents
  • MVVM Pattern
  • Windows Runtime
  • Application LifeCycle mit Windows Store Apps
  • Contracts
  • Tiles und Toasts
  • Sharing Code zwischen WPF und Windows Store Apps

Bei Interesse und auch Fragen zu den Inhalten bitte ein Email: office@cninnovation.com.

Natürlich ist ein Firmenkurs auch zu anderen Terminen möglich.

Preis für den 1. Dezember Termin: € 2.125,- (zzgl. Mwst) , Anmeldung

Mit dem Winter-Special auch noch ein Surface Pro 3 zum Kurs.

Christian

http://www.cninnovation.com

C# vNext – Null Propagation

Im letzten Blog Post habe ich Primary Constructors und Property Initializers gezeigt. Primary Constructors werden jetzt doch nicht in C# 6 kommen – aber dafür ist es möglich Property Initializers vom Constructor Body zu initialisieren. Mehr dazu aber in einem späteren Blog Post wenn dieses Feature auch im Visual Studio zur Verfügung steht.

In diesem Blog Post möchte ich ein besonders cooles Feature von C# 6 zeigen: Null Propagation. Programmcode besteht aus vielen Zeilen null checks – genau dieser Code kann damit vereinfacht werden.

Sharp right

© Liquidphoto | Dreamstime.comSharp Right Turn Sign Photo

Falls bei einem Aufruf von obj.Foo() die Variable obj auf null zeigt, gibt es eine NullReferenceException. Deshalb sollte die Variable vorher auf null überprüft werden. Bestehender Code

if (obj != null)
{
  obj.Foo();
}

Kann einfach mit Hilfe des ?. Operators vereinfacht werden:

obj?.Foo();

Wenn obj null ist ist das Ergebnis der Expression null, ansonsten wird die Foo Methode aufgerufen. Eine simple Vereinfachung vom Code.

Doch wo und wie ist das wirklich im Einsatz? Anhand von Template-generierten C# Code in einer Windows Store App möchte ich hier ein paar Beispiele zeigen.

In der Methode GoBack der Klasse NavigationHelper findet sich dieser Syntax. Erst nach der Überprüfung von this.Frame kann auf die Property CanGoBack zugegriffen werden. Wenn diese Property true zurückliefert kann die GoBack Methode vom Frame aufgerufen werden.

    public virtual void GoBack()
    {
      if (this.Frame != null && this.Frame.CanGoBack) this.Frame.GoBack();
    }

Mit dem neuen Syntax sieht das wie folgend aus. Statt dem Extra Vergleich auf nicht null genügt ein ?. und dann ein Vergleich mit true. Das Ergebnis der Expression this.Frame?.CanGoBack kann natürlich auch null zurückliefern, deshalb ist der Vergleich mit true erforderlich.

   public virtual void GoBack()
    {
      if (this.Frame?.CanGoBack == true) this.Frame.GoBack();
    }

In der Klasse NavigationHelper findet sich auch dieser Code für die GoBackCommand Property:

public RelayCommand GoBackCommand
{
  get
  {
    if (_goBackCommand == null)
    {
      _goBackCommand = new RelayCommand(
        () => this.GoBack(),
        () => this.CanGoBack());
    }
    return _goBackCommand;
  }
  set
  {
    _goBackCommand = value;
  }
}

Auch das lässt sich vereinfachen – allerdings mit dem coalescing Operator, und das ist jetzt schon mit C# möglich. Wenn _goBackCommand nicht null ist, wird der Wert dieser Variable zurückgeliefert. Ansonsten wird ein neuer RelayCommand instanziert, und die neu gesetzte Variable _goBackCommand ist das Ergebnis des get Accessors.

public RelayCommand GoBackCommand
{
  get
  {
    return _goBackCommand ??
      (_goBackCommand = new RelayCommand(
        () => this.GoBack(),
        () => this.CanGoBack()));
  }
  set
  {
    _goBackCommand = value;
  }
}

Ganz ähnlich wie die GoBack Methode ist die CanGoBack Methode implementiert. Zuerst die Überprüfung ob Frame nicht null ist bevor das Ergebnis von CanGoBack zurückgeliefert wird.

    public virtual bool CanGoBack()
    {
      return this.Frame != null && this.Frame.CanGoBack;
    }

Der coalescing Operator ist auch im Zusammenspiel mit null propagation sehr praktisch. Wenn das Ergebnis der vorherigen Expression null ist, wird in diesem Fall false zurückgeliefert. True gibt es nur wenn Frame nicht null ist, und CanGoBack auch true zurück liefert. Mit Hilfe von Expression Bodied Members => kann diese Methode ohne geschwungene Klammern implementiert werden, mit Syntax wie wir ihn von Lambda Expressions kennen.

    public virtual bool CanGoBack() => 
      this.Frame?.CanGoBack ?? false;

Ein weiteres praktisches Beispiel findet sich in der RelayCommand Klasse. In einer thread-safe Variante zum Feuern eines Events kommt der Delegate in eine Zwischenvariable (handler), bevor der Event über den Delegate gefeuert werden kann.

public void RaiseCanExecuteChanged()
{
  var handler = CanExecuteChanged;
  if (handler != null)
  {
    handler(this, EventArgs.Empty);
  }
}

Mit null Propagation wird dieser Code sehr viel einfacher. Der direkte Aufruf der Methode nach einem ? mit ?() ist nicht möglich. Aber die Invoke Methode des Delegates bringt Abhilfe. Invoke wird nur aufgerufen wenn die linke Expression nicht null ist. Das ist auch gleich thread-safe und erspart doch einige Codezeilen.

public void RaiseCanExecuteChanged() =>
  CanExecuteChanged?.Invoke(this, EventArgs.Empty);

C# 6 hat keine so großen Features wie die async und await Keywords von C# 5 oder LINQ von C# 3. Aber es gibt viele kleine praktische Erweiterungen. Null Propagation gehört auf jeden Fall dazu.

Christian

CN innovation

C# vNext – Primary Constructors und Property Intializers

C# 6 bringt zahlreiche neue Features in der Sprache. Dieser Artikel beschreibt Primary Constructors und wie sie Code ändern können.

Update: Primary Constructors kommen jetzt definitiv nicht in C# 6. Vielleicht in C# 7. Info: https://roslyn.codeplex.com/discussions/568820

Sharp right
© Liquidphoto | Dreamstime.comSharp Right Turn Sign Photo

Neue Features in C#: mit C# 2 sind generics neu gekommen, C# 3 brachte zahlreiche Syntaxerweiterungen für Language Integrated Query (LINQ) und hat fast jede (oder jede) Applikation beeinflusst. Die Neuigkeiten bei C# 4 waren dann bei einigen Szenarien wie der Integration von Scripting oder auch COM praktisch. Mit Version 5 gab es dann zwar nur zwei neue Keywords, die waren aber so wichtig und haben die asynchrone Programmierung vereinfacht dass sie wieder praktisch jedes Programm beeinflussten.

Version 6 bringt jetzt keine so wichtige Features wie wir das bei den Neuerungen der Vorgängerversion erleben durften. Aber dafür gibt es viele praktische Dinge. Da legen wir gleich mit Primary Constructors los.

Ein praktischer Anwendungsfall für Primary Constructors sind immutable Typen. Readonly Properties waren in der letzten Version von C# nicht mit auto properties möglich. Da musste es der gesamte Syntax sein um die Properties zu definieren, wie in der Klasse Gadget gezeigt.

public class Gadget
{
  public Gadget(int id, string name)
  {
    this.id = id;
    this.name = name;
  }

  private readonly int id;
  public int Id
  {
    get { return id; }
  }

  private readonly string name;
  public string Name
  {
    get { return name; }
  }

  public override string ToString()
  {
    return Name;
  }
}

Oft hat man sich in solchen Szenarien mit private set accessors beholfen, das ist mit automatic properties möglich:


public string Name { get; private set; }

Mit dem private set accessor kann diese Property nur in der Klasse selbst geändert werden. Der State ist aber nicht immutable. Änderungen sind jederzeit möglich.

Property Initializers

C# 6 erlaubt jetzt Property Initializers um eine Property gleich mit dem Erzeugen des Objektes zu initialisieren:


public string Name { get; set; } = "Sample";

Das ist jetzt auch nur mit einem get Accessor möglich. Dabei wird vom Compiler ein readonly field erzeugt.


public string Name { get; } = "Sample";

Beim Initializer ist es nicht möglich auf “this” zuzugreifen. Damit sind die Anwendungsszenarien hier doch sehr eingeschränkt – wäre nicht der Primary Constructor.

Primary Constructors

Der Primary Constructor wird direkt bei der Klasse definiert. Die Constructor-Parameter können dann direkt beim Property Initializer angegeben werden. Der Code der Gadget Klasse von vorhin wird damit sehr reduziert:

public class Gadget(int id, string name)
{
  public int Id { get; } = id;
  public string Name { get; } = name;

  public override string ToString()
  {
    return Name;
  }
}

Im Vergleich zu vorher ist die Klasse Gadget viel kürzer geworden. Nur die ToString Methode hat nichts an der Länge eingebüßt. Das wird sich aber noch in einem folgenden Blogartikel ändern.

Wie sieht es mit Primary Constructors jetzt aus bei etwas spezielleren Anwendungsfällen? Aufruf von Basisklassen, mehreren Constructors, und Contructor Body Implementierungen?

Basisklassen

Natürlich ist es auch möglich vom Primary Constructor auf den Constructor der Basisklasse zu verweisen. Dazu erstelle ich zuerst eine Basisklasse Base die selbst einen Primary Constructor verwendet.

class Base(int i)
{
  public int I { get;  } = i;
}

Die Klasse Derived referenziert den Constructor der Basisklasse mit dem Integer Argument und setzt außerdem die S Property.

class Derived(string s, int i): Base(i)
{
  public string S { get; } = s;
}

Constructor Block

Sollte auch noch Code beim Aufruf des Primary Constructors aufgerufen werden ist das in einem Constructor Block möglich. Einfach geschwungene Klammern nach der Klassendeklaration schreiben:

class Derived(string s, int i): Base(i)
{
  {
    Console.WriteLine("Derived ctor called");
  }

  public string S { get; } = s;
}

Mehrere Constructors

Mehrere Constructors sind natürlich auch möglich. Ein weiterer Constructor kann über den Constructor Intiailizer den Primary Constructor aufrufen.

class Derived(string s, int i): Base(i)
{
  {
    Console.WriteLine("Derived ctor called");
  }

  public Derived(int i)
    : this(string.Empty, i)
  {
  }

  public string S { get; } = s;
}

Was hältst du von diesem neuen C# Feature? Wird es deinen Code vereinfachen? In meinen Projekten sehe ich auf jeden Fall viele Vereinfachungen. Vielleicht reduziert sich damit auch die Seitenanzahl von Professional C# 😉

Christian

CN innovation

Sample Code zur BASTA! 2014 in Mainz

Links zu meinem Sample Code von der BASTA! 2014 in Mainz:

C# 6 – Neue Code Features – Achtung! Dafür wird Visual Studio „14“ CTP 3 benötigt.

Die C# 6 Beispiele funktionieren auch mit Visual Studio „14“ CTP 4. Fehler bei den Portable Libraries „File ‚UAP.props‘ not found“ gibt es diesen Fix: http://connect.microsoft.com/VisualStudio/feedback/details/1000796/file-uap-props-not-found-cant-build-a-portable-lib-on-vs14

Using LINQ in Real Life Scenarios (Visual Studio 2013)

XAML Templates (Visual Studio 2013)

Christian

CN innovation

BASTA! Herbst 2014 Speakerbutton 1

Highlights von der Build: .NET User Group Austria

Bei der diesjährigen Build Konferenz in San Francisco war .NET wieder ein großes Thema. Highlights davon und zum Windows 8.1 Update bei diesem Termin der User Group:

  •  .NET Compiler Platform
  • .NET Foundation
  • C# 6
  • RyuJIT, .NET Native
  • Windows 8 UI Updates
  • Universal Apps
  • Features für Business Apps


Treffpunkt: 17:30
Start des Vortrags: 18:00
Nach dem Vortrag: Diskussionsrunde mit Verpflegung

Location: Microsoft Österreich

Anmeldung: https://www.facebook.com/events/545311772248275 oder per Email ug@christiannagel.com