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
Q

Operatorenüberladung-Aufbau

A

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
Q

Überladung von Konvertierungsoperatoren

A

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
Q

Explizite Umwandlung

A

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
Q

Motivation

A

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
Q

Motivation-Problem mit object

A

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
Q

DRY-Prinzip

A

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
Q

Generics

A

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 <T> 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.</T>

32
Q

Typgenerisches Programmieren

A

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
Q

Generische Typen.

A

sind Datentypen, die mit anderen Typen
parametrisiert werden.

34
Q

allgemeingültigen Code

A

Man schreibt allgemeingültigen Code für eine Klasse, der
mit mehreren Datentypen funktioniert.

35
Q

Generics-Vorteile

A

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
Q

Generische Methoden

A

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
Q

Constraints

A

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
Q

Constraints – new()

A

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
Q
A