Einführung in C# (für Umsteiger)

Ähnliche Dokumente
Vererbung und Polymorphie

C# Einführung - Einführung in die OOP - Do, Hoang Viet Draphony Games (

Einführung in die Programmiersprache C#

Prof. W. Henrich Seite 1

Einführung in ActionScript

Übung 1 mit C# 6.0 MATTHIAS RONCORONI

Einführung in C# Teil 3. Matthias Nübling

Implementieren von Klassen

Vorausgesetzte Grundkenntnisse. Inhalt. Klassenhierarchie und Vererbung. Vererbung. Klassenhierarchie und Vererbung. Einführung in C# Teil 3

Einstieg in die Informatik mit Java

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Konstruktor/Destruktor

Einstieg in die Informatik mit Java

Vererbung, Polymorphie

Vererbung. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java 23.5.

Objektorientierte Programmierung III

Vererbung. Was versteht man unter dem Begriff Vererbung?

Einführung in die Programmiersprache Java II

Exceptions und Vererbung

3. Auflage. O Reillys Taschenbibliothek. C# 5.0 kurz & gut. Joseph Albahari & Ben Albahari O REILLY. Aktualisierung von Lars Schulten

Einstieg in die Informatik mit Java

C# Programmierung. Eine Einführung in das.net Framework. C# Programmierung - Tag 3: Kombination OOP/WF

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Kapitel 9 Schnittstellen

Microsoft.NET Framework & Component Object Model. ein Vortrag von Florian Steuber

Einstieg in die Informatik mit Java

Kapitel 8 Vererbung. Korbinian Molitorisz. IPD Tichy Lehrstuhl für Programmiersysteme

3 Objektorientierte Konzepte in Java

Programmieren in Java

Info B VL 11: Innere Klassen/Collections

Grundzüge der Programmierung. Wiederverwendung VERERBUNG

Objektorientierte Programmierung und Klassen

Universität Karlsruhe (TH)

Praxis der Programmierung

Kapitel 4: Klassen und Unterklassen

7. Übung Informatik II - Objektorientierte Programmierung

C#Objektorientierte. Aleksandra Maj. Programmiersprachen. Programmiersprachen am Beispiel C# Referat im Rahmen des Seminars. 15.

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter

C# im Vergleich zu Java

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Algorithmen und Datenstrukturen

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

3 Objektorientierte Konzepte in Java

Objektorientierung (OO)

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Vererbung & Schnittstellen in C#

Programmierkurs C++ Abstrakte Klassen und Methoden

Einstieg in die Informatik mit Java

C++ - Objektorientierte Programmierung Konstruktoren und Destruktoren

Javakurs 2013 Objektorientierung

Klassen in Java. Klassen

Kapitel 10 Delegationsvariablen

3 Klassen, Attribute, Methoden

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

3D Programmierpraktikum: Einführung in C++ - Teil 2

Polymorphismus 179. Function.h. #include <string>

Objektorientierte Programmierung Studiengang Medieninformatik

Programmierkurs C/C++

Short Introduction to C# C# (C SHARP) Microsofts Antwort auf Java

im Rahmen des Seminars - Programmiersprachen Markus Nestvogel

::Zweck. Sicherstellung, dass nur eine Instanz einer bestimmten Klasse existiert

Objektorientierte Programmierung mit C++ SS 2007

7. Klassenmethoden Einführung in die Programmierung (fbw) Sommersemester 2008 Prof. Dr. Bernhard Humm Hochschule Darmstadt, fbi

C# anhand von ECMA-334. Das große Seminar WS 04/ Daniel Wiese

Kapitel 13. Abstrakte Methoden und Interfaces. Fachgebiet Knowledge Engineering Prof. Dr. Johannes Fürnkranz

Grundlagen der Informatik

Interfaces und Vererbung

Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)

Klassen und Objekte. Einführung in Java. Folie 1 von Mai Ivo Kronenberg

Einstieg in die Informatik mit Java

Java Vererbung. Inhalt

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

Java Einführung Methoden in Klassen

Einführung in C# Teil 1. Matthias Nübling

Vorlesungsprüfung Programmiersprache 1

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Geschachtelte Klassen

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

Visuelle Kryptographie. Anwendung von Zufallszahlen

Einstieg in die Informatik mit Java

Kapitel 5: Interfaces

C++ Klassen, Vererbung. Philipp Lucas. Sebastian Hack. Wintersemester 2008/09. saarland.

12. Java Klassen. Klassen - Technisch. Beispiel: Erdbebendaten. Klassen - Konzeptuell

Vererbung und Polymorphie

Objektorientierte PL/SQL-Entwicklung Ein Erfahrungsbericht aus Sicht von JAVA-Entwicklern

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

Statische und Nichtstatische Methoden Properties/ Eigenschaften

Inhaltsüberblick. I. Grundbegriffe - Objekte und Klassen. Organisatorisches. I. Grundbegriffe - Objektorientierte Konzepte

Vererbung und Traits

Fragen zur OOP in Java

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Modellierung und Programmierung 1

Allgemeines - Prinzipien

Abstrakte Klassen, Interface. DVG Abstrakte Klassen, Interface

Einführung in das Objektorientierte Programmieren mit C++

Geschachtelte Klassen

Programmierkurs C/C++

Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen. J. W. v. Goethe.

Transkript:

Fachbereich Mathematik und Informatik Softwareprojekt: Spieleprogrammierung Einführung in C# (für Umsteiger) Do, Hoang Viet(do@mi.fu-berlin.de) Freie Universität Berlin, SoSe 2013

Agenda Allgemeines zu C# Besonderheiten in Types Besonderheiten in Datenmembers Konstante Datenmembers Besonderheiten in Funktionale Members Methoden Properties Delegate & Event 2

Die Programmiersprache C# Designziele bei.net: 1. Sprachunabhängig: Mischen von mehreren Programmiersprachen möglich 2. Plattformunabhängig (PC, WinPhone, Xbox, RIA) 3. OS-unabhängig Eigenschaften von C#: Reine objekt-orientiert Ursprünglich statisch typisiert Case-sensitive Unterstützt Unicode Automatische Speicherverwaltung, aber auch unsafe Code möglich! 3

.net - Grundbegriffe Compilation Unit, Source Code C# Compiler (csc.exe) Assemblies Common Intermediate Language (MSIL, CIL) JIT, Jitter Common Language Runtime (CLR) Memory Management, Garbage Collector (GC) Common Type System (CTS) Common Language Specification (CLS) 4

HelloWorld 5

Namespaces Die gesamte.net Framework Class Library (FCL) ist in dem Namensraum System definiert Keyword: using <namespace>; Entspricht dem using aus C++ nicht dem import von Java Übersicht vom.net Framework 4: Link 6

Verbatimstring & -identifier Verbatimidentifier: @<bezeichner> Schlüsselwörter als Namen @ sind nicht Teil des Namens! Verbatimstring: @ <beliebige Inhalt> Keine Übersetzung der Escape Characters Zeichenumbrüche und Tabs sind Teil des Strings (2x) für Beispiel: @ C:\Userfiles 7

Lokale Variablen: nullable types Nullable types <type>? <bezeichner> [= <expr>]; Als <expr> ist nun null möglich Intern: Instanzen der Struktur System.Nullable<T> Beispiel: int? Kinder_von_Hans = 0; int? Kinder_von_Klaus= null; Hans hat keine Kinder. Kinderanzahl von Klaus ist unbestimmt/unbekannt. Null coalescing: int a = b?? -1; Variable a wird den Wert von b zugewiesen, wenn b nicht null ist, ansonsten -1. (b muss nullable type sein) 8

Klassen Syntax: [attributes][accessibility][modifiers] class <identifier> [: <baselist>] { <class_body> } Attributes sind optional Beispiel: Serializable Thema Metadata & Reflection accessibility für Klassen: Zugriffsberechtigung public Eigenen Assembly und referenzierende Assembly internal Nur Eigene Assembly (default) 9

Klassen modifiers: abstract sealed static unsafe Keine Instanzen möglich Keine Ableitung möglich nur statische Methoden unsafe-konstrukte möglich wie pointer. (+ unsafe compiler option) baselist Eine Elternklasse! Keine Mehrfachvererbung möglich Mehrere Interfaces 10

Partielle Typen Anwendungsgebiet: Vorteilhaft bei Teamarbeit (Jeder implementiert seinen Teil!) Definition über mehrere Quelldateien Zusammenfügen bei der Kompilierung Komplette Typ Definition mit Schlüsselwort partial in der jeweiligen Datei. Optional: Partiale Methoden nutzen Alle Definitionen haben die gleichen Zugriffseinschränkung Wenn eine Definition als sealed definiert ist, dann auch Endklasse Als abstract definierit ist, dann Endklasse geerbert wird, dann komplette Endklasse 11

Klassenmembers Do, Hoang Viet 12

Klassenmembers Datenmembers Fields ( Objekteigentschaften ) Constants ( Klassenkonstanten ) Nested Types ( Eingebette Klassen ) Funktionale Members Methoden Konstruktor/ Destruktor Properties & Indexers Delegates Events Operatoren 13

Zugriffsmodifikatoren für Members Zugriffsmodifikator Außerhalb Kinderklassen public Ja Ja internal Ja (innerhalb der AS) Ja (innerhalb der AS) internal protected Ja (innerhalb der AS) Ja protected Nein Ja private Nein Nein 14

Datenmembers Do, Hoang Viet 15

Konstante Datenmembers Klassenkonstanten Syntax: [accessibility] [modifier] const <type> <identifier> = <const_expr>; Werden zur Kompilierungszeit erzeugt und bleiben persistent über die gesamte Laufzeit Klassengebunden readonly Fields Wertsetzung wird im Konstruktor durchgeführt (sprich zur Laufzeit) Objektgebunden 16

Beispiel: konstante Werte class Figur { const int c = 100; const string a = "blah"; int c = 100; readonly string _name; } public Figur(string name) { } _name = name; Do, Hoang Viet 17

Funktionale Members Do, Hoang Viet 18

Klassenmembers Datenmembers Fields ( Objekteigentschaften ) Constants ( Klassenkonstanten ) Nested Types ( Eingebette Klassen ) Funktionale Members Methoden Konstruktor/ Destruktor Properties & Indexers Delegates Events Operatoren 19

Methoden Syntax: [attributes] [accessibility] [modifiers] <return_type> <identifier> ([parameter_list]) { [statement;] }; [attributes] Obsolete, StrongNameIdentityPermission, InternalsVisibileTo [accessibility] private, public, protected, internal, internal protected 20

Konstruktoren Klassen haben immer einen Konstruktor Wenn keine definiert, dann Default Constructor: Weist default values den Fields zu Überladung möglich Funktionsauflösung durch new Operator Wenn ein eigene Constructor mit Parameter definiert wurde, muss Default- Constructor selbst definiert werden Konstruktoren können die this-referenz benutzen um sich gegenseitig aufzurufen (selbst der Default Constructor). Aber nicht innerhalb des Funktionsrumpf! colon syntax, nur für Konstruktoren verfügbar 21

Beispiel: colon-syntax class CBook { int _pages; string _isbn, _author; } CBook() : this(0, "", "") { } CBook(int pages) : this(pages, "", "") { } CBook(int pages, string author, string isbn) { //... } Do, Hoang Viet 22

Klassenkonstruktor Zweck: Initialisieren von static fields Aufruf: Werden nicht explixit aufgerufen! Sondern wenn die Klasse zum ersten Mal referrenziert wird. Einschränkungen Keine accessibility Keine Parameter Können nicht überladen werden 23

Beispiel: Object initializer Person p = new Person() { FName = Bruce", LName = Wayne", WorkP = new Address() { City = Gotham City } }; Do, Hoang Viet 24

Destruktoren (engl. Destructor) Syntax: [extern] ~<typename>() {[func_body]}; Werden nicht explixit gerufen, sondern vom Garbage Collector zur unbestimmten Zeit Werden vor dem Entfernen des Objektes aufgerufen Achtung, dass ist nicht gleich dem Ende vom Scope. Methode mit selben Name wie Klasse mit Prefix ~ (Tilde) 25

Properties Ein Field, das mit eine get & set Methode realisiert wird. get als R-value, genutzt innerhalb eines Ausdruckes set als L-value Beide werden nicht direkt aufgerufen. Einige Vorteile gegenüber Field Stabiler als public & protected fields, da eine Überprüfung stattfindet Write-only & read-only möglich; Fields nur read-only Können in interfaces aufgenommen werden; Fields nicht 26

Properties Syntax: [accessibility] [modifier] <type> <identifier> { [accessibility] get {[f_body]} [accessibility] set {[f_body]} } [accessibility] kann von einem der beiden geändert werden set: Implixit einen Parameter. Schlüsselwort value get: Keine Parameter Rückgabewert vom identifier 27

Beispiel: Properties class CPerson { string fname =null, lname =null; } int _age; public int age { get { return _age; } set { _age = value;} } public string fullname { get { return fname + ", "+ lname; } } Do, Hoang Viet 28

Delegate Funktionspointer als Typ Funktionsdeklaration mit Schlüsselwort delegate Syntax: [modifier] delegate <func_decl>; 29

Event Syntax: event <Delegate> <ident>; Subscribe: <ident> += <EventHandler>; Die Funktionssignatur vom EventHandler ist durch das Delegate gegeben. Unsubscribe: <ident> -= <EventHandler>; Die Funktionssignatur vom EventHandler ist durch das Delegate gegeben. Event auslösen <ident>( ); Die Parameterliste ist durch das Delegate gegeben. 30

Vererbung Do, Hoang Viet 31

Members überschreiben Überschreibar sind alle funktionale instance-members (Methoden, Properties, Indexers und Events) Data Members und Static Members können nur versteckt werden. Durch das Überschreiben entstehen Probleme fragile base class problem in C# wie in C++: Elternklasse muss es explicit erlauben! In Java per default erlaubt 32

virtual und override base-class erlaubt mit Schlüsselwort virtual Gilt nicht nur für die unmittelbare derived-class Funktionale Instance-Members: Methoden, Properties, Indexers und Events derived-class überschreibt mit Schlüsselwort override Zu Properties: man kann nicht read-/write-only verändern! Schlüsselwort base : Zugriff auf unmittelbare base-class (nur public & protected) base.base.member ist nicht möglich! 33

Konstruktor & Destruktor werden nicht vererbt! Alle Konstruktoren der Vererbungskette werden aufgerufen (bottom-up: Urklasse als Erstes) Per default, wird der Standardkonstruktor aufgerufen. Für andere Konstruktoren colon-syntax benutzen mit base statt this Die Benutzung von base(this) ist nicht möglich, da das Objekt noch nicht erstellt wurde. Destruktoren in umgekehrte Reihenfolge 34

Erweiterungsmethode (engl. Extension Method) Erweitern von versiegelten Typen wie Wertetypen Statische Methoden in statische Klassen Type: Erste Parameter beginnt mit this und dem zu erweiternden Type Aufruf als gehöre Methode zur ursprünglichen Type Interface: Auch anwendbar für interfaces Aufrufbar von allen Types mit dem interface 35

Erweiterungsmethode (engl. Extension Method) Wenn Instanzmethode und Erweiterungsmethode die selbe Signatur haben, wird die Instanzmethode gerufen. Wenn 2 Erweiterungsmethode die selbe Signatur haben, muss man die Methode explicit aufrufen. Erweiterungsmethode gilt nur für den Namensraum, indem es definiert ist! 36