Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch

Die Seite wird erstellt Leo Baur
 
WEITER LESEN
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Die .NET-Technologie

       ■ Karl Rege
       ■ Teil der Folien mit freundlicher Genehmigung von
       Prof. Dr. Hanspeter Mössenböck, Dr. Wolfgang Beer, Dr. Herbert Prähofer (Uni Linz)
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Motivation

School of Engineering    © K. Rege, ZHAW   2 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Why Make the Effort?

School of Engineering   © K. Rege, ZHAW   3 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Motivation für diese Vorlesung
■ Man wird im Informatiker Berufsleben fast unausweichlich mit dieser
  Technologie in Kontakt kommen (ausser man wechselt den Beruf).
■ Entwickler, die beide Welten (Java/Open-Source, Microsoft) kennen, haben
  bessere Berufsaussichten.
■ Integration verschiedener Systeme wird eine wichtige/die wichtigste kommende
  Herausforderungen für SW-Ingenieure sein.
■ In .NET sind einige Konzepte umgesetzt, die man bisher im Studium noch nicht
  kennengelernt hat; es ist auch ein Beispiel von gutem Engineering.

Pro Microsoft                                Pro Java/FOSS/Apple
■ Microsoft stellt die beste Software der    ■ M$ ist das Evil Empire der
  Welt her.                                    Softwarebranche.
■ Sie handelt absolut selbstlos und will     ■ M$ versucht den Software-Markt zu
  nur das Beste für die Welt.                  monopolisieren.
■ C#/.NET ist bei Microsoft die zentrale     ■ Lerne deinen Kontrahenten kennen.
  Plattform für die Anwendungs-              ■ Man kann sich von M$ "inspirieren"
  entwicklung                                  lassen und gute Ideen in die Open-
                                               Source Welt hinüber nehmen
School of Engineering                  © K. Rege, ZHAW                              4 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Schlacht um das OS

School of Engineering   © K. Rege, ZHAW   5 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Microsofts/Balmers Fehler

■ War vom 87 bis 07 absolut dominante Plattform - auch Mobile (Windows CE)
■ Was hat S. Balmer bis 2013 nur falsch gemacht?

                                                              hat
                                                               hat786786Mio
                                                                         Mio$$verdient
                                                                               verdientindem
                                                                                         indem
                                                              erersich selber gefeuert hat
                                                                   sich selber gefeuert hat

                        I Iam
                            amfired
                                fired!!!!

School of Engineering                       © K. Rege, ZHAW                                      6 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
In absoluten Zahlen weit weniger dramatisch

School of Engineering   © K. Rege, ZHAW       7 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Global OS Verbreitung Aug. 2019

 Desktop OS

                                          Windows 87%
                                          Mac OS 9.7%
                                          Linux 2.2%
                                          Chrome OS 0.36%
                                          Unknown 0.26%
                                          BSD 0.01%

  Mobile OS

                                          Android 70.24%
                                          iOS 28.4%
                                          Unknown 1.11%
                                          Series 40 0.08%
                                          Windows Phone OS 0.07
                                          Linux 0.03%

                                     © https://www.netmarketshare.com
School of Engineering   © K. Rege, ZHAW                           8 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Development Environments

■ Stack Overflow Umfrage 2019

       https://insights.stackoverflow.com/survey/2019#technology

School of Engineering                       © K. Rege, ZHAW        9 von 73
Die .NET-Technologie - Karl Rege Teil der Folien mit freundlicher Genehmigung von - Radar,zhaw.ch
Most Loved/Dreaded Development Languages

  Loved                          Dreaded

School of Engineering   © K. Rege, ZHAW    10 von 73
Most Loved Non Web Frameworks

■ Most Loved

School of Engineering   © K. Rege, ZHAW   11 von 73
Technology Clusters

School of Engineering   © K. Rege, ZHAW   12 von 73
Trends - Silicon Valley - Big Data Science

■ Via Google Trends - August 2020: C# sehr konstant und gewinnt an Popularität

School of Engineering             © K. Rege, ZHAW                         13 von 73
Trends- Silicon Valley - Artificial Intelligence

MS uses AI to improve "update experience"
■ Have you ever had to stop what you were
  doing, or wait for your computer to boot up
  because the device updated at the wrong time?
■ We trained a predictive model that can
  accurately predict when the right time to restart
  the device is. Meaning, that we will not only check if you are currently using your
  device before we restart, but we will also try to predict if you had just left the
  device to grab a cup of coffee and return shortly after.
https://blogs.windows.com/windowsexperience/2018/07/25/announcgin-windows-10-insider-preview-build-17723-and-build-18204/#xtpvWfhkBc7yTCE7.97

■ Ideally combined with Amazon Halo
      ■   A fitness tracker that listens to your mood via AI
      ■   A pair of always-on microphones will listen to users,
          trying to assess their mood and stress levels.

 School of Engineering                                       © K. Rege, ZHAW                                                     14 von 73
Inhalt und Aufbau der Vorlesung

School of Engineering               © K. Rege, ZHAW       15 von 73
Aufbau der Vorlesung

School of Engineering   © K. Rege, ZHAW   16 von 73
Aufteilung der Vorlesung 1 & 2

■ .NET 1 Framework 2.0 (2006)
■ .NET 2 Neuere Technologien und .NET Core, Azure, ….

                                .NET 2
                                  FS
                                .NET 1
                                  HS

School of Engineering             © K. Rege, ZHAW       17 von 73
.NET Plattform (heute)

■ Aktuell existieren 3 "Flavours" der .NET Plattform + Mono

School of Engineering               © K. Rege, ZHAW           18 von 73
.NET Plattform (heute)

■ Plattform unabhängige Desktop GUI Entwicklung schwierig
   ■   verschiedene XAML "Dialekten"
   ■   WPF, Silverlight, Windows Runtime-XAML, Xamarin Forms

          http://www.heise.de/developer/meldung/Unreife-Kernloesung-NET-Core-1-0-ist-zwar-erschienen-aber-noch-nicht-fertig-3249902.html

School of Engineering                                   © K. Rege, ZHAW                                                        19 von 73
.NET Plattform (morgen)

■ Ziel ist eine gemeinsame Basis für alle Plattformen

                                                                                   1995

https://medium.com/capgemini-microsoft-team/future-of-net-net-5-microsoft-build-2019-from-a-net-developer-point-of-view-7a1158fb0691

 School of Engineering                                          © K. Rege, ZHAW                                                        20 von 73
Aufbau der Vorlesung

■ Semesterplanung (ohne Gewähr)
   1        Einführung, Die Sprache C# Teil 1                                8          Klassenbibliothek Teil 3
            Einführung,S ym bo le ,Type n,Aus drüc ke ,
            De kla ra tio ne n, Anwe is unge n, Ein-/Aus ga be                          XML, ActiveX, DLL

   2        Die Sprache C# Teil 2                                            9          ADO.NET&XML
            Kla s s e n und S truc ts , Ve re rbung, Inte rfa c e s                     Verbindings o rientierter und Verbindungs lo s er
   3                                                                                    Zugriff, DataSets , DataSets und XML Daten
            Die Sprache C# Teil 3
            De le ga te s und Eve nts , Aus na hm e n,
            Na m e ns rä um e ,
   4        Die Sprache C# Teil 4                                            10         ASP.NET Teil 1 dyn Webs eiten, Web-
            Attribute , a uto m a tis c h ge ne rie rte Ko m m e nta re                 Fo rmulare, Ereignis behandlung,
   5                                                                                    Steuerelemente, Validierung

            C# Teil 5, Die .NET Architektur                                  11         ASP.NET Teil 2 Eigene Steuerelemente,
            Virtue lle M a s c hine , C TS , C LS , C IL, M a ta da te n,               Zus tands verwaltung, Applikatio ns s chicht,
            As s e m blie s und M o dule , VES , S ic he rhe it,Ze ige r                Ko nfiguratio n
   6        Klassenbibliothek Teil 1                                         12         VB.NET
            C o lle c tio ns ,Ein-/Aus ga be ,Thre a ding
                                                                             13         Industrie Vortrag
   7
                                                                             14         Reserve
            Klassenbibliothek Teil 2
            Ne tzwe rkko m m unika tio n, R e fle c tio n,
            Gra phis c he B e nutze ro be rflä c he n

School of Engineering                                                 © K. Rege, ZHAW                                                   21 von 73
Unterlagen

■ Folien: waikiki.zhaw.ch oder MOODLE

■ Buch: .NET Kompaktkurs C# 7.0
  Mössenböck et. al.
  dpunkt Verlag

■ ISBN: 978-3-86490-227-7

School of Engineering             © K. Rege, ZHAW   22 von 73
Was ist .NET?

■ Eine Software-Plattform für Desktop und Web Anwendungen

      Unmanaged
      Applications

                        Betriebssystem (Windows, Linux, Android, … )

School of Engineering                  © K. Rege, ZHAW                 23 von 73
Was ist .NET?

■ Eine Software-Plattform für Desktop und Web Anwendungen

      Unmanaged
                           Managed Applications
      Applications

                             Klassenbibliothek

                        Common Language Runtime

                        Betriebssystem (Windows, Linux, Android, … )

    Common Language        Interoperabilität, Sicherheit, Garbage Collection,
    Runtime                Just-In-Time Compilation, Versionierung, ...
    Klassenbibliothek      GUI, Collections, Threads, Netzwerk, Reflection, XML, ...

School of Engineering                   © K. Rege, ZHAW                                24 von 73
Was ist .NET?

■ Eine Software-Plattform für Desktop und Web Anwendungen

      Unmanaged
                           Managed Applications                Web Applications
      Applications

                                                         Web Forms     Web Services
                             Klassenbibliothek
                                                                   ASP.NET

                        Common Language Runtime
                                                               Web Server (IIS)

                        Betriebssystem (Windows, Linux, Android, … )

    ASP.NET,               Web-GUI (objektorientiert, ereignisorientiert, browseunabhängig)
    ASP.NET Core
    Web Services           verteilte Dienste über (SOAP, HTTP, REST)

School of Engineering                  © K. Rege, ZHAW                                25 von 73
Was ist .NET?

■ Ein Framework und mehr ...

      Unmanaged
                           Managed Applications                Web Applications
      Applications

                                                         Web Forms      Web Services
                             Klassenbibliothek
                                                                   ASP.NET

                        Common Language Runtime
                                                               Web Server (IIS)

                        Betriebssystem (Windows, Linux, Android, … )

   .NET-Framework          + Tools (Visual Studio .NET, VS Code, ...)
                           + Servers (SQL Server, Azure, ...)

School of Engineering                  © K. Rege, ZHAW                                 26 von 73
(Ursprüngliche) Ziele von .NET

■ Zusammenführung von Desktop- und Web-Programmierung

   Bisher

         Desktop-Programmierung                   Web-Programmierung
         Objektorientiert                         ASP (nicht objektorientiert)
         Compiliert (C/C++, Fortran, ...)         Interpretiert (VBScript, JavaScript, PHP, ...)
         Klassenbibliothek                        Eigene Bibliothek

   Unter .NET

         Desktop- und Web-Programmierung
         Objektorientiert (auch ASP.NET)
         Compiliert (C#, C++, VB.NET, Fortran, ...)
         Einheitliche Klassenbibliothek

School of Engineering                       © K. Rege, ZHAW                                27 von 73
… (Ursprüngliche) Ziele von .NET

■ Interoperabilität zwischen Programmiersprachen
■ Bisher
   ■   Millionen Zeilen Code in C++, Fortran, Visual Basic, ...
   ■   Nur sehr beschränktes Zusammenspiel: über OLE/ActiveX

  Unter .NET
       ■   Binärkompatibilität zwischen mehr als 20 Sprachen (C#, C++, VB.NET, Java,
           Pascal, PHP, Eiffel, Fortran, Cobol, ML, Haskell, Oberon, Perl, Python, ...)

           Klasse in VB.NET               Unterklasse in C#          Verwendung in Java
           Public Class A               class B : A {                class C {
            Public x As Integer            public string s;            private B obj;
            Public Sub Foo() ...           public void Bar() {...}     ...
           End Class                    }                              obj = new B();
                                                                       obj.Bar()
                                                                       ...
                                                                     }

School of Engineering                          © K. Rege, ZHAW                            28 von 73
… (Ursprüngliche) Ziele von .NET

■ Einfachere dynamische Webseiten
■ Bisher
   ■    ASP (Mischung von HTML und VBScript oder Javascript)

 Unter .NET
    ■   ASP.NET (saubere Trennung von HTML und Script-Code)

                                                               ■ Objektorientiert
                                                               ■ Ereignisorientiert
                                                               ■ Interaktiv erstellbar (RAD)
                                                               ■ Selbstgeschriebene GUI-Elemente mögl.
                                                               ■ Effizient (compilierte Server-Scripts)
                                                               ■ Zustandsverwaltung
                                                               ■ Autorisierung / Authentifizierung
                                                               ■...

School of Engineering                      © K. Rege, ZHAW                                         29 von 73
… (Ursprüngliche) Ziele von .NET

■ Web Services: Verteilte Applikationen am Internet
■ Bisherige Benutzung des Internets
   ■    Email
   ■    Web-Browser (zeigt Daten für menschlichen Betrachter)

   Unter .NET: B2B-Applikationen ohne Web-Browser

       Reisebüro
        Reisebüro                Luftlinie
                                  Luftlinie
                                                  Hotel
                                                   Hotel"Sunny
                                                         "SunnyIsland"
                                                                Island"
                          Hotelkette
                           Hotelkette
        Bank                                      Hotel
                                                   Hotel"Blue
                                                         "BlueMoon"
                                                              Moon"
         Bank

       Basierend auf einfachen Standards
       ■ HTTP
       ■ SOAP, REST, JSON
       ■ WCF

School of Engineering                         © K. Rege, ZHAW             30 von 73
… (Ursprüngliche) Ziele von .NET

■ Mehr Qualität und Komfort
                                            ■ Strenge Typenprüfung
   ■ Sicherheit                             ■ Laufzeitprüfungen (keine Buffer Overruns
                                              mehr!)
                                            ■ Garbage Collection
                                            ■ CIL-Code-Verifier
                                            ■ Public Key Signierung von Code
                                            ■ Rollenbasierte Rechte
                                            ■ Codebasierte Rechte
   ■ Side by Side Execution                 ■ Versionierung
                                            ■ Ende der DLL-Konflikte
                                                ■    DLLs verschiedener Versionen erlaubt

   ■ Einfachere Software-Installation        ■ Keine Registry-Einträge mehr nötig
                                                 ■   aber u.U. Eintrag in GAC

                                             ■ Spurlose Deinstallation

School of Engineering                   © K. Rege, ZHAW                                     31 von 73
Interoperabilität
                                                                                    C#
    C#         C++           VB      ...                if (a > b) max = a; else max = b;

                                                                                    CIL
 Compiler Compiler Compiler Compiler                    IL_0004:    ldloc.0
                                                        IL_0005:    ldloc.1
                                                        IL_0006:    ble.s        IL_000c
                                                        IL_0008:    ldloc.0
                 CIL-Code                               IL_0009:    stloc.2
               (+ Metadaten)      "Virtual
                                   "VirtualMachine"
                                            Machine"    IL_000a:    br.s         IL_000e
                                                        IL_000c:    ldloc.1
                                                        IL_000d:    stloc.2
                   Lader
                                                                               Intel-Code
                  Verifier
                                                        mov   ebx,[-4]
                JIT-Compiler                            mov   edx,[-8]
                                                        cmp   ebx,edx
                                                        jle   17
                                                        mov   ebx,[-4]
               Maschinencode                            mov   [-12],ebx
                                                        ...

School of Engineering                       © K. Rege, ZHAW                                 32 von 73
.NET Basis Technologie

■ Sprache C#, etc.
   ■   Generics
   ■   Partielle Klassen
   ■   Typisierte Iteratoren
   ■   Annonyme Methoden
   ■   Nullable Types
   ■   Plattformunabhängig (Windows, Linux, OSX,..)
   ■   Unterstützung von 64 Bit

■ Bibliothek
   ■   Eigene .NET Bibliotheken
   ■   Unterstützung von vielen Open Source Bibliotheken (jQuery, Angular, …)

■ Werkzeug: Visual Studio
   ■   Komfortable Umgebung

School of Engineering                       © K. Rege, ZHAW                     33 von 73
.NET 4.8 Bibliotheken

                           Desktop Applications              Web Applications

      Unmanaged            WCF
                           WCF           WPF
                                         WPF             WWF
                                                         WWF               WIF
                                                                           WIF
      Applications
                                                                            19'000
                                                                             19'000Klassen!
                                                                                    Klassen!
                                                        Web Forms   Web Services
                             Klassenbibliothek
                                                                ASP.NET

                         Common Language Runtime
                                                             Web Server (IIS)

WCF               Windows Communication Foundation
WPF               Windows Presentation Foundation
WWF               Windows Workflow Foundation
WIR               Windows Identity Foundation
School of Engineering                 © K. Rege, ZHAW                              34 von 73
C# die primäre Sprache für

School of Engineering            © K. Rege, ZHAW     35 von 73
Inhalt Sprachteil (C# 2.0)

Teil1                                          Teil 3
■ Überblick                                    ■ Vererbung
■ Symbole                                      ■ Interfaces
■ Typen                                        ■ Delegates
■ Ausdrücke                                    Teil 4
                                               ■ Ausnahmen
Teil 2                                         ■ Namensräume und Assemblies
■ Deklarationen                                ■ Attribute
■ Anweisungen                                  ■ Threads
■ Klassen und Structs                          ■ XML-Kommentare
                                               Teil 5
                                               ■ Generics
■ Literatur
   ■   Hejlsberg: The C# Programming Language, Addison Wesley
   ■   Mössenböck: Softwareentwicklung mit C# 6.0, dpunkt
   ■   S.Robinson et al: Professional C#, Wrox Press
   ■   Referenzinformation und Tutorials auf .Net-SDK Seite

School of Engineering                     © K. Rege, ZHAW                     36 von 73
Überblick: Merkmale von C#

  Sehr ähnlich zu Java
  70% Java, 10% C++, 5% Visual Basic, 15% neu
 Wie in Java                                   Wie in C++
 ■ Objektorientierung (einf. Vererbung)        ■ Operator Overloading
 ■ Interfaces                                  ■ Zeigerarithmetik in Unsafe Code
 ■ Exceptions                                  ■ Einige syntaktische Details
 ■ Threads                                     ■ Objekte am Stack (Structs)
 ■ Namensräume (analog zu Paketen)
 ■ Strenge Typenprüfung                        Wie in VB
 ■ Garbage Collection
 ■ ...                                         ■ Namensparameter (bei Attributen)

School of Engineering                     © K. Rege, ZHAW                           37 von 73
Neue Features in C#

Neu (Vergleich zu Java)                                 Syntactic Sugar
■ Referenzparameter                                     ■ Komponentenunterstützung
■ Blockmatrizen                                              ■   Properties
                           1.5
■ Enumerationen                                              ■   Events
■ Uniformes Typsystem                                   ■ Delegates
                  1.5
■ Attribute                                             ■ Indexer                       1.5

■ Systemnahes Programmieren                             ■ foreach-Schleife              1.5
■ Versionierung
                                                        ■ Boxing/Unboxing
                                 1.5
■ Generische Typen
                                                        ■ ...
■ Funktionale Programmierung (3.5)
■ Dynamik Typing (3.5)
■ await, async (4.5)

  Language Equivalents
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vsintro7/html/vxgrflanguageequivalents.asp

School of Engineering                               © K. Rege, ZHAW                                               38 von 73
Einfachstes C#-Programm

        File Hello.cs
namespace Sample {
  using System;                                             ■ enthält den Namensraum Sample
                                                            ■ benutzt Namensraum System
    class Hello {
                                                            ■ Hauptmethode muss immer
        static void Main() {                                  Main heissen
          Console.WriteLine("Hello World");                 ■ Gibt auf Konsole aus
        }
                                                            ■ Dateiname und Klassenname
    }
}                                                             müssen nicht übereinstimmen.

        Übersetzen (im Konsolenfenster; erzeugt Hello.exe)
           csc Hello.cs (Linux: msc Hello.cs)
        Ausführen
           Hello (Linux: mono Hello.exe)

School of Engineering                           © K. Rege, ZHAW                         39 von 73
Programm aus 2 Dateien

    Counter.cs
public class Counter {
   int val = 0;
   public void Add (int x) { val = val + x; }
                                                        Übersetzen
   public int Val () { return val; }
}                                                          csc /target:exe Counter.cs Prog.cs
                                                           Linux: msc /target:exe Counter.cs Prog.cs

                                                        Ausführen
                                                           Windows: Prog
    Prog.cs
using System;

public class Prog {

    static void Main() {
      Counter c = new Counter();
                                                        Arbeiten mit DLLs
      c.Add(3); c.Add(5);                                  csc /t:library Counter.cs
      Console.WriteLine("val = " + c.Val());
    }
                                                           => erzeugt Counter.dll
}
                                                           csc /r:Counter.dll Prog.cs
                                                           => erzeugt Prog.exe

 School of Engineering                          © K. Rege, ZHAW                                        40 von 73
Gliederung von C#-Programmen

                                       Programm

                File1.cs               File2.cs               File3.cs

 namespace A {...}                namespace B {...}                   namespace C {...}

                                                                      .NET
                                                                       .NET2.0
                                                                             2.0partial
                                                                                 partialClasses:
                                                                                         Classes:eine
                                                                                                   eine
                                                                      Klasse
                                                                       Klasseüber
                                                                               übermehrere
                                                                                    mehrereFiles
                                                                                              Filesverteilt
                                                                                                    verteilt

                class X {...}         class Y {...}          class Z {...}

■ Wenn kein Namensraum angegeben => Namenloser Standardnamensraum
■ Namensraum kann auch Structs, Interfaces, Delegates, Enums enthalten
■ Namensraum kann in verschiedenen Files "wiedereröffnet" werden
■ Einfachster Fall: 1 File, 1 Klasse (wie Java)
    ■   Konvention: Namen der Hauptklasse mit File-Namen identisch.

School of Engineering                       © K. Rege, ZHAW                                           41 von 73
Zur Laufzeit: Assemblies

    Prog.cs               Lib.cs
                                            ■ Assemblies sind kleinste Einheit für
     class A { ... }      class C { ... }       ■   Auslieferung
     class B { ... }                            ■   Versionierung
                                                ■   Laden

             csc Prog.cs,Lib.cs

            Prog.exe

               Manifest                       Versionsnummer
                                              Public Key                 ■ ermöglicht:
                                              Schnittstellenbeschreibung    ■ dynamisches Laden
               Metadaten
                                              - Klassen                     ■ Versionsprüfung
                                              - Methoden                    ■ Reflection
               CIL-Code für A                 - Variablen
               CIL-Code für B                 - Parameter
                                              - Typen
               CIL-Code für C                 - ...

                  Lader

School of Engineering                       © K. Rege, ZHAW                             42 von 73
Lexikalische Symbole
        Symbole aus denen die Sprache C# aufgebaut ist.

School of Engineering       © K. Rege, ZHAW               43 von 73
Namen

    Syntax
                                                                   EBNF
                                                                    EBNF
                                                                   ==definiert
                                                                      definiert
       Name = (letter | '_' | '@') {letter | digit | '_'}.
                                                                   | |alternativ
                                                                       alternativ
                                                                   [][]optional
                                                                        optional
    ■ Unicode!                                                     {}{}0..∞
                                                                        0..∞

    ■ Gross/Kleinschreibung ist signifikant

    ■ Können Unicode-Escapesequenz enthalten (z.B. \u03c0 für p)
    Beispiele
       someName
       sum_of3
       _10percent
       @while                      Der   Name   while
       p                           Der   Name   p
       \u03c0                      Der   Name   p
       b\u0061ck                   Der   Name   back

School of Engineering               © K. Rege, ZHAW                                 44 von 73
Schlüsselwörter (ca 100)

abstract                add           as                ascending
async                   await         base              bool
break                   by            byte              case
catch                   char          checked          class
const                   continue      decimal           default
delegate                descending    do                double
dynamic                 else          enum              equals
explicit                extern        false             finally
fixed                   float         for               foreach
from                    get           global           goto
group                   if            implicit          in
int                     interface     internal          into
is                      join          let               lock
long                    namespace     new               null
object                  on            operator          orderby
out                     override      params            partial
private                 protected     public            readonly
ref                     remove        return            sbyte
sealed                  select        set               short
sizeof                  stackalloc    static            string
struct                  switch        this              throw
true                    try           typeof            uint
ulong                   unchecked     unsafe            ushort
using                   value         var               virtual
void                    volatile      where             while
yield

■ dürfen nicht für Variablen-Namen verwendet werden (@vorangestellt erlaubt)
School of Engineering                © K. Rege, ZHAW                      45 von 73
Namenskonventionen

Gross/Kleinschreibung
■ CamelCase: Wortanfang gross schreiben (z.B. ShowDialog)
■ Anfangsbuchstabe gross, ausser bei private Variablen
    ■   Konstanten           gross   SIZE, MAX_VALUE
    ■   lokale Variablen     klein   i, top, sum                              wie
                                                                               wieininJava
                                                                                       Java
    ■   private Felder       klein   data, lastElement, _feld
    ■   öffentliche Felder   gross   Width, BufferLength                    Durch
                                                                             DurchGross/Kleinschreibung
                                                                                      Gross/Kleinschreibung
                                                                            wird
    ■   Properties           gross   Length, FullName                        wirdSichtbarkeit
                                                                                   Sichtbarkeitausgedrückt;
                                                                                                ausgedrückt;
    ■   Enum-Konstanten      gross   Red, Blue
    ■   Methoden             gross   Add, IndexOf (auch private)
    ■   Typen                gross   StringBuilder (vordefinierte Typen klein: int, string)
    ■   Namensräume          gross   System, Collections

Erstes Wort
    ■ void-Methoden sollten mit Verb beginnen (z.B. DoCompute)
    ■ Alles andere sollte mit Substantiv beginnen (z.B. size, IndexOf, Collections)
    ■ enum-Werte oder bool-Members können mit Adjektiv beginnen (Red, Empty)
Weiter
    ■Accronyme   sollen "dumm" Gross-Klein geschrieben werden: XML -> Xml
 School of Engineering                         © K. Rege, ZHAW                                           46 von 73
Kommentare

Zeilenende-Kommentare
  // a comment

Klammerkommentare
  /* a comment */
  Dürfen nicht geschachtelt werden

Dokumentationskommentare
  /// a documentation comment

School of Engineering                © K. Rege, ZHAW   47 von 73
Typen

School of Engineering   © K. Rege, ZHAW   48 von 73
Einheitliches Typsystem

                                  Typen

             Werttypen                              Referenztypen                 Zeiger

Einfache Typen          Enums   Structs      Klassen Interfaces Arrays Delegates
bool sbyte byte float
char short ushort double
                                          Benutzerdefinierbare Typen
     int   uint decimal
     long ulong
                                                                       ... fehlen in Java

Alle Typen sind kompatibel mit Object
- können Object-Variablen zugewiesen werden
- verstehen Object-Operationen, z.B. 5.1.ToString()

School of Engineering                     © K. Rege, ZHAW                                   49 von 73
Werttypen versus Referenztypen

                        Werttypen                 Referenztypen

Variable enthält        Wert                      Referenz auf ein Objekt
gespeichert am          Stack                     Heap
Initialisierung         0, false, '\0'            null
Zuweisung               kopiert Wert              kopiert Referenz

Beispiel                int i = 17;               class C {string name}
                                                  C o = new C(); o.name = "Kurt";
                                     Stack
                                     i   17
                        int j = i;                C o2 = o;
                                     j   17                       Heap
                                                         o
                                                                      Kurt
                                                         o2

School of Engineering                 © K. Rege, ZHAW                        50 von 73
Einfache Typen

Schlüsselwort                    abgebildet auf             in Java Wertebereich
sbyte            System.SByte    byte          -128 .. 127             ==Byte
                                                                          ByteininJava
                                                                                   Java

short            System.Int16    short         -32768 .. 32767
int              System.Int32    int           -2147483648 .. 2147483647
long             System.Int64    long          -263 .. 263-1
byte             System.Byte     ---           0 .. 255
ushort           System.UInt16   ---           0 .. 65535
uint             System.UInt32   ---           0 .. 4294967295
ulong            System.UInt64   ---           0 .. 264-1
float            System.Single   float         ±1.5E-45 .. ±3.4E38 (32 Bit)
double           System.Double   double        ±5E-324 .. ±1.7E308 (64 Bit)
decimal          System.Decimal ---            ±1E-28 .. ±7.9E28 (128 Bit)
bool             System.Boolean boolean        true, false
char             System.Char     char          Unicode-Zeichen

School of Engineering                  © K. Rege, ZHAW                                    51 von 73
Zeichen und Zeichenketten

Syntax
  CharConstant = ' char '.
  StringConstant = " {char} ".

char kann sein
  beliebiges Zeichen ausser Ende-Hochkomma, Zeilenende oder \
  Escape-Sequenz
     \'        '
     \"        "
     \\        \
     \0        0x0000
     \a        0x0007   (alert)
     \n        0x000a   (new line)
     \r        0x000d   (carriage return)
     \t        0x0009   (horizontal tab)

  Unicode- oder Hex-Excape-Sequenz
     \u0061 a
     \x0061 a
School of Engineering                  © K. Rege, ZHAW          52 von 73
… Zeichen und Zeichenketten

Beispiele für Escape-Sequenzen in Zeichenketten

  "file \"C:\\sample.txt\""                      file "C:\sample.txt"
  "file \x0022C:\u005csample.txt\x0022"

   Wenn @ vor einer Zeichenkette steht
   ■ gilt \ nicht als Metazeichen
   ■ wird " durch Verdopplung ausgedrückt
   ■ dürfen Zeilenumbrüche vorkommen

   Beispiel

      @"file file
      ""C:\sample.txt""" "C:\sample.txt"

School of Engineering                      © K. Rege, ZHAW              53 von 73
Ganze Zahlen

Syntax
  DecConstant = digit {digit} {IntSuffix}.
  HexConstant = "0x" hexDigit {hexDigit} {IntSuffix}.
  IntSuffix = 'u' | 'U' | 'l' | 'L'.
Typ
  ohne Suffix:          kleinster aus int, uint, long, ulong
  Suffix u, U:          kleinster aus uint, ulong
  Suffix l, L:          kleinster aus long, ulong

Beispiele
  17                    int
  9876543210            long
  17L                   long
  17u                   uint
  0x3f                  int
  0x10000               long
  0x3fL                 long

School of Engineering                      © K. Rege, ZHAW     54 von 73
Gleitkommazahlen

Syntax (vereinfacht)
  RealConstant       = [Digits] ["." [Digits]] [Exp] [RealSuffix].
  muss zumindest 1 Ziffer und etweder ".", Exp oder RealSuffix enthalten
  Digits           = digit {digit}.
  Exp              = ("e" | "E") ["+" | "-"] Digits.
  RealSuffix       = "f" | "F" | "d" | "D" | "m" | "M".
Typ
  Suffix f, F:     float (7 Ziffern)
  Suffix d, D:     double: (15 Ziffern) - default
  Suffix m, M:     decimal: (28 Ziffern)
Beispiele
  3.14             double
  1E-2             double
  .1               double
  10f              float

School of Engineering                     © K. Rege, ZHAW                  55 von 73
… Gleitkommazahlen: Typ decimal

    Gleitkommazahl mit 128 Bit Genauigkeit

                                  s = 0 oder 1
         (-1) s   * c *   10 -e   0 ≤ c < 296
                                  0 ≤ e ≤ 28

    Für Berechnungen
    ■ mit grossen Zahlen (28 Ziffern)
    ■ mit exakter Dezimalgenauigkeit (z.B. 0.1 = 1 * 10 -1)
    ■ aber in der Ausführung langsam (nicht von HW unterstützt)

      => in der Finanzmathematik oft grosse/sehr genaue Zahlen benötigt,

School of Engineering                  © K. Rege, ZHAW                     56 von 73
Kompatibilität bei numerischen Typen
                                         Vorsicht:
                                          Vorsicht:ev.
                                                    ev.Verlust
                                                        Verlust
                                         von
                                          vonPräzision
                                              Präzision

   decimal         double        float         long               int    short    sbyte

             nur
              nurmit
                  mitTypecast
                      Typecast
                                               ulong              uint   ushort   byte

                                                                                  char

    Folgende Zuweisungen sind ohne Typecast sicher

      intVar = shortVar;
      intVar = charVar;
      floatVar = charVar;

    aber
      decimalVar = (decimal)doubleVar;

School of Engineering                      © K. Rege, ZHAW                                57 von 73
Enumerationen

Aufzählungstypen aus benannten Konstanten

Deklaration (auf Namespace-Ebene)
  enum Color {Red, Blue, Green}         // Werte: 0, 1, 2
  enum Access {Personal=1, Group=2, All=4}
  enum Access1 : byte {Personal=1, Group=2, All=4}

    Beispiel

         Color c = Color.Blue;   // Enum-Konstanten müssen qualifiziert werden
         Access a = Access.Personal | Access.Group;
                               // a enthält nun eine "Menge" von Werten
         if ((Access.Personal & a) != 0) Console.WriteLine("access granted");

School of Engineering                    © K. Rege, ZHAW                         58 von 73
Operationen mit Enumerationen

Erlaubte Operationen
   Vergleiche if (c == Color.Red) ...
                if (c > Color.Red && c
Arrays

Eindimensionale Arrays
   int[] a = new int[3];
   int[] b = new int[] {3, 4, 5};
   int[] c = {3, 4, 5};
   SomeClass[] d = new SomeClass[10];              // Array von Referenzen

Mehrdimensionale Arrays ("ausgefranst", jagged)
    int[][] a = new int[2][];     // Array von Referenzen auf Arrays
    a[0] = {1, 2, 3, 4};
    a[1] = {4, 5, 6};

Mehrdimensionale Blockarrays (rechteckig)
                                                                                     C#
    int[,] a = new int[2, 3];                // Block-Matrix
    int[,] b = {{1, 2, 3}, {4, 5, 6}};       // Können direkt initialisiert werden
    int[,,] c = new int[2, 4, 2];

School of Engineering                    © K. Rege, ZHAW                             60 von 73
Mehrdimensionale Arrays

   Ausgefranst (wie in Java)                                        a[0][1]
                                           a
       int[][] a = new int[2][];                   a[0]
       a[0] = new int[3];                          a[1]
       a[1] = new int[4];

       int x = a[0][1];

   Rechteckig (kompakter, effizienterer Zugriff)                              C#

       int[,] a = new int[2, 3];           a              a[0, 1]

       int x = a[0, 1];

School of Engineering                   © K. Rege, ZHAW                            61 von 73
Variabel lange Arrays: Listen

using System;
using System.Collections.Generic;

class Test {
   static void Main() {
       List a = new List();
       a.Add("Caesar");
       a.Add("Dora");
       a.Add("Anton");
       a.Sort();
       for (int i = 0; i < a.Count; i++)
          Console.WriteLine(a[i]);
   }
}
Ausgabe
  Anton
  Caesar
  Dora
School of Engineering               © K. Rege, ZHAW   62 von 73
Assoziative Arrays: Hashtables

using System;
using System.Collections.Generic;
class Test {
   static void Main() {
       Dictionary phone = new Dictionary();
       phone["Karin"] = 7131;
       phone["Peter"] = 7130;
       phone["Wolfgang"] = 7132;
                                                       foreach
        string[] keys = new string[phone.Count];        foreach(String
                                                                (Stringname
                                                                        nameininphone.keys)
                                                                                 phone.keys)
                                                         Console.WriteLine("{0}
        phone.Keys.CopyTo(keys,0);                        Console.WriteLine("{0}=={1}",
                                                                                   {1}",
                                                                    name,
        for (int i = 0; i < keys.Length; i ++) {                     name,phone[name]);
                                                                           phone[name]);
            string name = keys[i];
            Console.WriteLine("{0} = {1}",name, phone[name]);
        }
    }
}
Ausgabe
  Wolfgang = 7132
  Peter = 7130
  Karin = 7131
School of Engineering                © K. Rege, ZHAW                                   63 von 73
Sonstiges über Arrays

Indizierung beginnt bei 0
Arraylänge
   int[] a = new int[3];
   Console.WriteLine(a.Length);    // 3
   int[][] b = new int[3][];
   b[0] = new int[4];
   Console.WriteLine("{0}, {1}", b.Length, b[0].Length);   // 3, 4
   int[,] c = new int[3, 4];
   Console.WriteLine(c.Length);   // 12
   Console.WriteLine("{0}, {1}", c.GetLength(0), c.GetLength(1));    // 3, 4

System.Array enthält nützliche Array-Operationen
   int[] a = {7, 2, 5};
   int[] b = new int[2];
   Array.Copy(a, b, 2); // kopiert a[0..1] nach b
   Array.Sort(b);
   ...

School of Engineering                © K. Rege, ZHAW                       64 von 73
String Methoden

Benutzbar als Standardtyp string
   string s = "Alfonso";

Bemerkungen
■ Strings sind nicht modifizierbar (dazu StringBuilder)
■ Können mit + verkettet werden: "Don " + s
■ Können indiziert werden: s[i]
■ Längenprüfung: s.Length
■ Referenztyp, daher Referenzsemantik in Zuweisungen
■ aber Wertevergleich mit == und != : if (s == "Alfonso") ...
■ Klasse String definiert viele nützliche Operationen:
  CompareTo, CompareOrdinal, IndexOf, StartsWith, Substring, ...
■ Konvertierung String in Zahl: Double.Parse, Int32.Parse, etc

School of Engineering                 © K. Rege, ZHAW              65 von 73
Einführung Klassen

Deklaration
  class Rectangle {
      private Point origin;
      public int Width, Height;
      public Rectangle() { origin = new Point(0,0); Width = Height = 0; }
      public Rectangle (Point p, int w, int h) { origin = p; Width = w; Height = h; }
      public void MoveTo (Point p) { origin = p; }
  }

Verwendung
    Rectangle r = new Rectangle(new Point(10, 20), 5, 5);
    int area = r.Width * r.Height;
    r.MoveTo(new Point(3, 3));
    Rectangle r1 = r ; // Zeigerzuweisung

  Bemerkungen
  ■Klassen sind Referenztypen (wie in Java)
   Objekte werden am Heap angelegt
  ■Konstruktor-Aufruf erzeugt neues Objekt am Heap und initialisiert es
   Parameterloser Konstruktor darf deklariert werden
School of Engineering                  © K. Rege, ZHAW                              66 von 73
Zusammenfassung

■ .NET Beinhaltet:
   ■   CLR, Klassenbibliothek, Web Forms, Web Services, ASP.NET
   ■   und Sprachen C#, VB.NET.

■ C# viele Gemeinsamkeiten zu Java (statt C# besser Java#)
   ■   C-Syntax, OO Konzepte, Strenge Typenprüfung Garbage Collection, etc.
   ■   aber auch neue Konzepte: Structs, Delegates(später)

■ Unterscheidung von Referenz und Werttypen
   ■   automatische Umwandung in Referenztyp (Boxing)

School of Engineering                      © K. Rege, ZHAW                    67 von 73
Fragen ?

                        uff !

School of Engineering    © K. Rege, ZHAW   68 von 73
Werkzeuge des .NET-Frameworks

School of Engineering              © K. Rege, ZHAW      69 von 73
Visual Studio

■ Alle Versionen für Studierende ZHAW gratis
    ■   Empfohlen aktuelle Community Edition
    ■   Englische Version - man kann besser nach Fehlermeldungen "googeln"

School of Engineering                      © K. Rege, ZHAW                   70 von 73
Visual Studio Community 2019

School of Engineering   © K. Rege, ZHAW   71 von 73
Visual Studio Code

■ Editor mit Plugins für viele Sprachen

School of Engineering               © K. Rege, ZHAW   72 von 73
Weitere Werkzeuge

■ C#-Compiler                            Ö csc.exe
■ Visual Basic .NET-Compiler             Ö vbc.exe
■ JScript-Compiler                       Ö jsc.exe
■ IL-Disassembler                        Ö ildasm.exe
■ Global Assembly Cache Utility          Ö gacutil.exe
■ Debugger                               Ö cordbg.exe
■ .NET Framework Configuration Tool      Ö mmc mscorcfg.msc
■ Resharper                              Ö https://www.jetbrains.com/resharper/
■ CodeReflect                            Ö http://www.devextras.com
■ Weitere Tools                          Ö http://www.it-visions.de/dotnet/tools.aspx
■ SharpDevelop                           Ö http://sharpdevelop.net/opensource/sd/

School of Engineering             © K. Rege, ZHAW                              73 von 73
Sie können auch lesen