web Flashcards

1
Q

Was ist Eine Variable ?

A

Variablen sind das wichtigste konzept in der Programmierung

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Deklaration

A

Private int anzahl;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Intilialisirung

A

Private int anzahl=0;

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was ist eine konstante Variable?

A

Eine Variable derernwert wäjrend der Ausführung des programms nicht geändert werden kann.bedeutet dass wir der konstanten Variablen zur Laufzeit keine werte zuweisen.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Komplierzeit Konstanten

A

werden mit Schlüsselwort const deklariert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Laufzeit Konstanten

A

werden mit Schlüsselwort credonly deklariert

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

const

A

erlaubt nur konstante variablen im Ausdruck . kann so wohl auf klassenebene als auch innerhalb der Methode deklariert werden . kann nicht mit dem schlüsselwort static deklariert werden da sie standardmäßig statisch ist .

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Strukturtyps

A

Beim Design eines Strukturtyps können im Wesentlichen dieselben Member eingesetz werden wie bei einer Klassendefinition. Eine Variable vom Typ einer Struktur enthält jedoch keine Referenz
auf ein Heap-Objekt, sondern alle Feldinhalte ihres Typs.Eine Variable vom Typ einer Struktur enthält jedoch keine Referenz
auf ein Heap-Objekt, sondern alle Feldinhalte ihres Typs.
Wie bei Variablen mit einem elementaren Datentyp liegt keine
Referenz-, sondern eine Wertsemantik vor.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Strukturen

A

Kleine Instanzen,Wertsemantik erwünscht,Nullinitialisierung akzeptabel, Keine Vererbung erforderlich

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Kleine Instanzen

A

Der Typ ist relativ einfach aufgebaut, hat also nur wenige Instanzvariablen. z.B. Punkte in einem
zwei oder drei dimensionalem Raum.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Wertsemantik erwünscht

A

Bei einem Methodenaufruf wird eine als Wertparameter verwendete Strukturinstanz komplett
kopiert, während von einem Parameterobjekt nur die Adresse übergeben wird. Das Original der
kopierten Strukturinstanz wird durch den Methodenaufruf nicht verändert, was beim
Parameterobjekt hingegen möglich ist.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Nullinitialisierung akzeptabel

A

Bei einer Struktur muss sichergestellt sein, dass die Nullinitialisierung aller Felder zu einer
regulären Instanz führt.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Keine Vererbung erforderlich

A

Bei Strukturen fehlt die Möglichkeit, per Vererbung eine Hierarchie spezialisierter Typen
aufzubauen. Das Implementieren von Schnittstellen ist aber möglich.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Strukturen

A

Sie können ohne den Operator new ein Objekt erzeugen, wenn die Struktur
ausschließlich Felder hat und keine Methoden. Enthält die Struktur jedoch
Methoden, müssen zuerst alle Felder initialisiert werden, um die Methoden des
Objekts fehlerfrei aufrufen zu können.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Konstruktoren in Strukturen

A

Standardmäßig stellt eine Struktur einen parameterlosen Konstruktor bereit, der
mit new-Operator aufgerufen werden kann.
Strukturen lassen die Definition weiterer Konstruktoren zu, die jedoch
parametrisiert sein müssen, denn das Überschreiben des parameterlosen
Konstruktors einer Struktur ist nicht erlaubt. Fügen Sie einen parametrisierten
Konstruktor hinzu, muss eine Bedingung erfüllt werden: Alle Felder der Struktur
müssen initialisiert werden.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Enumerationen

A

C# bietet mit den Enumerationen (Aufzählungstypen) eine Lösung, die
folgende Vorteile hat:
› Gut lesbarer Quellcode durch Klartextnamen für die Merkmalsausprägungen
› Abweisung von falsch geschriebenen Klartextnamen durch den Compiler
› Geringer Speicherbedarf
› Eine Enumeration basiert auf einem zugrunde liegenden integralen Typ (meist
int) und enthält eine (meist kleine) Menge von benannten Konstanten dieses
Typs.

17
Q

Objektinitialisierer

A

public Felder und Eigenschaften (Properties) können bei der Objekterzeugung
auch ohne spezielle Konstruktordefinition (parametrisierter Konstruktor)
initialisiert werden.
› Dazu wird hinter den Konstruktoraufruf eine durch geschweifte Klammern
begrenzte Liste von Name-Wert - Paaren gesetzt, die man als
Objektinitialisierer bezeichnet.

18
Q

Anonyme Klassen

A

Als Innenausstattung enthält die anonyme Klasse eine öffentliche get-only –
Eigenschaft(Propertie) für jedes Element in der Liste des Objektinitialisierers.Eine anonyme Klasse erbt die Methoden ihrer Basisklasse Object. Aufgrund
ihrer Entstehungsgeschichte können anonyme Klassen über das Object-Erbgut
hinaus keine Handlungskompetenzen besitzen.

19
Q

Nullable Datentypen

A

NULL bedeutet nichts – eine Variable, die keinen Wert hat.
› Vor dem Zugriff auf einen Wert, muss sichergestellt werden, dass eine Variable
einen Wert hat. Sonst NullReferenceException!
› NULLEN sind besonders relevant, wenn es um eigene Objekte und Strings geht.
› Zahlen haben immer einen Standartwert. z.B. 0 (die Zahl Null, weil Wertetyp)
› Einer integer Variablen kann kein NULL-Wert zugewiesen werden. Es sei denn,
wir definieren es als Nullable.
› Definition einem nullable Variable mit einer ? (Fragezeichen) nach Typ.Bei der Deklaration von Nullable-Variablen ohne Initialisierung haben die
Variablen den Wert null.

20
Q

Nullable Datentypen

A

Operatoren (+, -, etc.)
› Liefern als Ergebnis null falls einer der beiden Operanden null ist
› Vergleichsoperatoren (>, >=, etc.) liefern false, falls einer der beiden
Operanden null ist
› == liefert true, falls beide null sind
› Nullable Variablen sind mit null vergleichbar

21
Q

Verwenden eines Nullwerts

A

Nullable-Objekte kommen immer von einem Basisdatentyp, z.B. eine Ganzzahl
wie in den vorherigen Beispielen. Während diese Datentypen einen
Standardwert haben können, ist der Standardwert eines Nullwerts immer Null.Ein Nullable-Typ erbt auch eine sehr nette Hilfsmethode, die Sie verwenden
können: GetValueOrDefault().

22
Q

Methodenüberladung

A

Besitzt eine Klasse mehrere Methoden mit demselben Namen, liegt eine sogenannte
Überladung von Methoden vor. Eine Überladung ist erlaubt, wenn sich die Signaturen der
beteiligten Methoden unterscheiden. Zwei Methoden besitzen genau dann dieselbe Signatur, was innerhalb einer Klasse verboten
ist, wenn die folgenden Bedingungen erfüllt sind: Die Namen der Methoden sind identisch.Die Parameterlisten sind gleich lang Positionsgleiche Parameter haben denselben Datentyp.
› Positionsgleiche Parameter haben denselben Transfermodus, d.h.:
› Beide sind Wertparameter,
› oder beide sind Verweisparameter.
› Bei zwei Verweisparametern sorgen unterschiedliche Richtungsangaben (ref, in, out) nicht für
abweichende Signaturen.

23
Q

Operatorenüberladung-Regeln

A

Geschieht durch Definition statischer Memberfunktionen und durch
Verwendung des operator-Schlüsselworts
Es können nicht alle Operatoren überladen werden
Bei einigen Operatoren bestehen Einschränkungen
Nur bestehende Operatoren können überladen werden
Es können keine neuen Operatoren „erzeugt“ werden
Die Operationen von Operatoren auf den elementaren Datentypen können
nicht umdefiniert werden.
Die Grundfunktionalität eines Operators bleibt immer erhalten: Ein binärer
Operator benötigt immer zwei Operanden, ein unärer immer nur einen.

24
Q

Operatorenüberladung-Einschränkungen

A

Einige Operatoren können nur paarweise überladen werden.
Wollen Sie zum Beispiel den Vergleichsoperator »==« überladen, müssen Sie
auch den Operator »!=« überladen.
Damit erzwingt C# eine konsistente Prüfung auf Übereinstimmung und
Nichtübereinstimmung.
Zuweisungsoperator »=« kann nicht überladen werden.
Überladen Sie einen binären Operator, z. B. »+«, wird der
Additionszuweisungsoperator »+=« automatisch implizit überladen.
Andere nichtüberladbare Operatoren: der Punktoperator, der bedingte
Operator »?:« sowie die Operatoren new, is, typeof und sizeof.

25
Operatorenüberladung-Aufbau
In der Klasse muss eine Methode mit der richtigen Signatur erstellt werden Überladung muss public sein static sein operator – Schlüsselwort enthalten Operationszeichen enthalten Syntax für Binäre Operanden: public static Typ operator +(Typ t1, Typ t2) { ... } Syntax für Unäre Operanden: public static Typ operator ++(Typ t1) { ... }
26
Überladung von Konvertierungsoperatoren
Konvertierung zwischen Datentypen sind implizit und explizit möglich. byte zahl1 = 5; › int zahl2 = zahl1; // Implizite Umwandlung ------------------------------------------- int zahl3 = 7; › byte zahl4 = (byte)zahl3; // Explizite Umwandlung -------------------------------------------- Schlüsselwort implicit › Rest wie bei der Operatorüberladung › public static implicit operator ZielTyp (Ursprungstyp) { ... }
27
Explizite Umwandlung
Explizite Umwandlung ist ebenfalls überladbar › Vermeidung einer automatischen Umwandlung › Ggf. nicht gewünscht › Ggf. nicht bewusst verwendet › Eine Umwandlung ist ggf. mit Datenverlust verbunden › Die Umwandlung sollte in diesem Fall explizit sein › Explizite und Implizite Umwandlung nicht parallel mit gleichen Datentypen möglich
28
Motivation
Angenommen wir brauchen einen Stack für string-Werte. ›Wir schreiben also eine Klasse StringStack. › Die Klasse verwaltet Elemente nach dem LIFO-Prinzip (Last In,First Out). ›Wir können Elemente hinzufügen (Push) und wieder entfernen (Pop). Lösung gewährleistet Typsicherheit › Führt ggf. zu einer großen Anzahl ähnlicher Klassen für einen spezifischen Typ › Klassen sind schlecht zu warten › Ggf. wird in Zukunft ein weiterer Stack mit einem noch nicht berücksichtigten Typ nötig
29
Motivation-Problem mit object
Bei der Methode Pop gibt es Probleme, weil die Methode einen Wert vom Typ object zurückgibt. Es muss eine explizite Konvertierung durchgeführt werden, um wieder zum Typ des Elements zu kommen.
30
DRY-Prinzip
ie Klassen, die wir erstellt haben unterscheiden sich nur bei der Typangabe. Alles andere ist vollkommen identisch. › Verstoß gegen DRY-Prinzip. › Das DRY Prinzip besagt, dass Codeduplizierungen vermieden werden sollten.
31
Generics
Generics stellen Platzhalter für Datentypen zur Verfügung › Dies gilt für Klassen, Methoden und Variablen › Generics erlauben die Verwendung von Datentypen, welche zum Zeitpunkt der Entwicklung noch nicht feststehen › Häufig wird ein großgeschriebenes T in spitzen Klammern als Platzhalter verwendet › Es können aber auch andere Buchstaben und , durch Komma getrennt, weitere Typen hinzugefügt werden. Bei der Instanziierung der Klasse wird der generische Typparameter durch einen konkreten Datentyp ersetzt.
32
Typgenerisches Programmieren
Wiederverwendung von Code . Typsicherheit. Performanz. Generische Typen sind Datentypen, die mit anderen Typen parametrisiert werden. › Man schreibt allgemeingültigen Code für eine Klasse, der mit mehreren Datentypen funktioniert. › Der Benutzer der Klasse entscheidet bei der Instanziierung, welcher konkrete Datentyp verwendet werden soll. › Dadurch ist die Klasse sowohl allgemeingültig als auch typsicher.
33
Generische Typen.
sind Datentypen, die mit anderen Typen parametrisiert werden.
34
allgemeingültigen Code
Man schreibt allgemeingültigen Code für eine Klasse, der mit mehreren Datentypen funktioniert.
35
Generics-Vorteile
Sie erlauben das Schreiben von Typen oder Methoden, die für mehrere Typen anwendbar sind und dennoch Typsicherheit bieten. Durch den Einsatz von Generics kann der Compiler beim Erstellvorgang überprüfen, ob der angegebene Code korrekt ist. Bei Wertetypen tritt bei Generics kein Boxing bzw. Unboxing auf, was die Performance erhöht. Generics fördern das DRY-Prinzip, da man denselben Code für beliebig viele unterschiedliche Typen nutzen kann. Es ist nicht mehr erforderlich ähnliche Klassen je Datentyp zu schreiben.
36
Generische Methoden
Methoden können ebenfalls generisch sein. Sie müssen nicht zu einer generischen Klasse gehören. Im Vergleich zu mehreren überladenen Methoden, die analoge Operationen mit verschiedenen Datentypen ausführen, ist eine generische Methode oft die bessere Lösung..
37
Constraints
Soll innerhalb des Codes einer generischen Klasse ein bestimmtes Klassenmitglied des verwendeten Typs aufgerufen werden (z.B. eine Methode), ist eine explizite und damit auch eine unsichere Umwandlung notwendig. › Fehler, die ggf. auftreten könnten, werden erst zur Laufzeit erkannt
38
Constraints – new()
Annahme: wir möchten in einer generischen Klasse ein Objekt vom Typ des generischen Typparameters erzeugen. Problem: C#-Compiler weiß nicht, ob die den Typparameter ersetzende Klasse einen passenden Konstruktor hat. Die Folge wäre ein Kompilierfehler. Lösung: Constraint new() anhängen
39