C# Flashcards

1
Q

Was ist der wesentliche Unterschied zwischen C# und einer herkömmlichen Programmiersprache?

A

Managed:

  • nicht in Maschinensprache kompiliert, sondern in Intermediate Language
  • virtuelle Maschine für die Ausführung
  • automatisches Speichermanagement
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Was versteht man unter Garbage Collection?

A

Garbage Collection ist eine automatische Speicherverwaltung. Es werden dabei zur Laufzeit nicht länger benötigte Speicherbereiche automatisch identifiziert und freigegeben.

Simple Garbage Collection

  • Start: wenn nicht mehr genügend Speicher für die Applikation vorhanden ist oder nach direktem Aufruf
  • Ablauf:
    • Warten, bis alle managed Threads in einem sicheren Zustand sind
    • Erstellen eines Graphen mit allen erreichbaren Objekten – von den „Root References“ ausgehend
    • Erreichbare Objekte werden am Heap komprimiert
    • das übrig gebliebene Memory wird freigegeben
    • Referenzen zu den verschobenen Objekten werden aktualisiert
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Was sind Properties und wozu werden sie verwendet?

A

Mischung aus Methode und Datenfeld

  • Auch Zugriffsmethoden sind eigentlich normale Methoden, die einzelne Eigenschaften (Attribute) eines Objekts abfragen (get) oder ändern können(set)
  • Verwendung im Aufrufenden Code wie Datenmember
  • Zugriff erfolgt über get- und set-Accessor-Methode
    • berechnete Werte
    • auf Änderungen reagieren
  • read-and-write, read-only, write-only
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Was versteht man unter Casting?

A
  • In C# kann jedes Objekt auf alle seine Basistypen umgewandelt werden.
  • Alle Klassen in C# erben entweder direkt oder indirekt von der Klasse Object.
  • Die Zuweisung eines abgeleitet Objekts zu einem Objekt einer Basisklasse erfordert keine spezielle Syntax.
  • Es ist jedoch ein expliziter Cast erforderlich wenn eine Basisklasse auf ein abgeleitets Objekt gecastet wird.
  • Laufzeitfehler: InvalidCastException
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Was versteht man unter Boxing? Beispiel

A

Boxing bezeichnet die Umwandlung von Werttypen in object (Referenztyp)

  • object-Instanz wird allokiert
  • Wert wird in die Instanz kopiert
    int x = 10;
    object o = x;

Unboxing: Werttyp aus object extrahieren

  • int y = (int)o;

Kann zu schlechter Performance führen

InvalidCastException

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

Wie werden Parameter übergeben?

A

In C# können Parameter als Werte oder als Verweis an Parameter übergeben werden. Durch die Übergabe als Verweis kann der Wert des Parameters geändert werden und diese Änderung bleibt in der Aufrufumgebung erhalten. Um einen Parameter als Verweis zu übergeben, verwendet man ref oder out.

Ein Argument, das an einen ref-Parameter übergeben wird, muss vor der Übergabe initialisiert werden. Dies unterscheidet sich von den out-Parametern, deren Argumente nicht explizit initialisiert werden müssen, bevor sie übergeben werden.

Member einer Klasse können keine Signaturen haben, die sich nur durch ref oder out voneinander unterscheiden.

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

Was ist ein Event?

A
  • Events erlauben es einem Objekt
    (publisher) ein anderes Objekt (receiver)
    darüber zu informieren, dass etwas passiert ist.
  • Events werden mit Delegates definiert.
  • Der Receiver hängt sich an das Event
    mit einer Event Handler Methode,
    die den Anforderungen des Event Delegates
    entspricht. Diese Methode wird ausgeführt,
    wenn das Event ausgelöst wird.

public event PropertyChangedEventHandler
PropertyChanged;

private void OnPropertyChanged
(string propertyName)

{

this.PropertyChanged?.Invoke
(this, new PropertyChangedEventArgs
(propertyName));}

arcDiagramSettings.PropertyChanged
+= this.ArcDiagramSettings_PropertyChanged;


private void ArcDiagramSettings_PropertyChanged(object sender, PropertyChangedEventArgs e){}

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

Was ist ein Delegate?

A

Ein Delegate ist ein Objekt das einen Verweis für eine Methode aufnehmen kann.

Die Methode müssen die gleichen Parameter und Rückgabewerte wie der Delegate haben.

Erzeugung mit Referenz auf:

  • static Methode
  • Instanzmethode
  • Codeblock (anonyme Methode) –> delegate(bool state) {}
  • Lambda Expression = Ausdruck, der eine Methodenreferenz liefert

Aufruf

  • erfolgt mit Hilfe des Delegate-Objekts
  • unter Angabe der aktuellen Parameter

handler1(true);

handler1.Invoke(true);

private delegate void aufruf(string s, string x);

private void m1(string str1, string str2)
{
MessageBox.Show(str1 + “ “ + str2);
}

aufruf myAufruf1 = new aufruf(m1); 
myAufruf1("Hallo", "Welt");
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Was ist ein Assembly?

A

Ein Assembly ist der complierte Code in MSIL (Microsoft Intermediate Language) als .exe oder .dll zusammen mit Metadaten.

Assemblies sind die Grundbausteine von .NET Anwendungen. Assemblies sind nichts weiter als Dateien mit der Endung .exe bzw. .dll. Pro Projekt in einer Solution gibt es eine Assembly.

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

Wie werden in C# Threads programmiert?

A

Klasse Thread

  • kapselt einen Thread
  • Eigenschaften: Name, IsBackground, Priority

Delegates für die Thread-Methode.

Thread thread = new Thread(ThreadMethod);

thread. Name = “Mein 1. Thread”;
thread. Start();

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

Wie werden in C# Threads synchronisiert?

A

Probleme beim Zugriff auf gemeinsame Daten

  • Wettlaufsituation (Race Condition) – mehrere Threads verändern unkontrolliert gemeinsame Daten
  • Verklemmung (Deadlock) – Threads warten auf Objekte, die der jeweils andere blockiert hat

–> Gemeinsamen Zugriff vermeiden

Möglichkeiten der Synchronisation im .NET

  • Synchronized contexts
  • *Synchronization Attribute:** bietet Synchronisation für Objekte vom Typ ContextBoundObject:
  • nur Instanzfelder und –methoden werden synchronisiert (nur ein Thread kann gleichzeitig zugreifen)
  • statische Felder und Methoden werden nicht synchronisiert (Zugriff ist nicht geschützt)
  • Synchronized code regions
    • MethodImplAttribute mit Option Synchronized:
      • nur 1 Thread darf die Methode gleichzeitg ausführen
      • für Instanz und statische Methoden
    • Monitor:
      • Objekt für die Synchronisation von Statements
      • Kurzschreibweise mit dem Lock-Statement
  • Manuelle Synchronisation z.B.
    • ReaderWriterLock
      • erlaubt gleichzeitig entweder 1 Schreib-Thread oder beliebig viele Lese-Threads
      • AcquireReaderLock/ReleaseReaderLock: Lock fürs Lesen
      • AcquireWriterLock/ReleaseWriterLock:Lock fürs Schreiben
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Was ist ein Namespace?

A

Das namespace-Schlüsselwort wir verwendet um einen Bereich zu deklarieren, der einen Satz von verknüpften Objekten enthält.

Namespaces verfügen über folgende Eigenschaften:

  • Sie organisieren große Codeprojekte.
  • Sie werden mit dem Operator . begrenzt.
  • Das using-Schlüsselwort kann verwendet werden, um nicht den ganzen Namen angeben zu müssen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Wann wird der Destruktor ausgeführt?

A

Der Programmierer kann nicht steuern, wann der Destruktor aufgerufen wird, da dies durch den Garbage Collector bestimmt wird. Der Garbage Collector sucht nach Objekten, die von der Anwendung nicht mehr verwendet werden. Wenn er ein Objekt findet, das entfernt werden könnte, ruft er den Destruktor auf (wenn vorhanden) und beansprucht den durch das Objekt belegten Speicherplatz. Destruktoren werden darüber hinaus beim Beenden des Programms aufgerufen.

  • Destruktoren werden zur Zerstörung von Klasseninstanzen verwendet.
  • Im Destruktor sind Anweisungen enthalten, die die vom einem Objekt beanspruchten Fremdressourcen (unmanaged) freizugeben (z.B. Datenbankverbindungen, Dateien).
  • Desturktoren können nicht für Strukturen definiert werden.
  • Eine Klasse darf nur einen Destruktor besitzen.
  • Destruktoren können nicht aufgerufen werden. Der Aufruf wird automatisch vollzogen.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Was ist der Unterschied zwischen class und struct?

A
  • Class ist ein Referenztyp und Struct ein Werttyp.

Struct ist ein benutzerdefinierter Werttyp

  • enhalten Datenfelder, Methoden, Properties
  • Konstruktoren
    • dienen der Initialisierung der Datenfelder
    • Defaultkonstruktor gibt es immer, kann nicht selbst definiert werden
  • Keine Vererbung zwischen Strukturen (sealed)
  • Speicherplatz-Allokation mit Deklaration
  • Initialisierung unbedingt erforderlich vor der Verwendung
  • TimeSpan, DateTime
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Was versteht man unter Operator Overloading? Wozu wird dies i.d.R. benötigt?

A

Klassen und Structs können Operatoren überladen.

public static Complex operator +(Complex a, Complex b) {}

Damit wird die Operation für Instanzen der Klasse/Struct verfügbar

Möglich u.a. für

  • Arithmetische Operatoren(+ - * / %)
  • Vergleichsoperatoren (== != < < <= >=)
    • müssen paarweise überladen werden
    • Bitoperatoren(& | ^ ~)
    • Shiftoperatoren(<< >>)
    • Inkrement, Dekrement(++ –)

Nicht möglich für

  • Zuweisungen(= += -= usw.)
    • Die Abkürzungen stehen aber implizit zur Verfügung
    • Logische Operatoren && und ||
    • Indexoperator []
    • Memberzugriff .
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Was versteht man unter Serialisierung?

A

Die Serialisierung ist in der Informatik die Abbildung von strukturierten Daten auf eine sequenzielle Darstellungsform. Serialisierung wird hauptsächlich für die Persistierung von Objekten in Dateien und für die Übertragung von Objekten über das Netzwerk bei verteilten Softwaresystemen verwendet.

Übliche Speichermedien sind nur in der Lage, Datenströme zu speichern. Um Persistenz für ein Objekt zu erreichen, kann es serialisiert werden. Hier wird der komplette Zustand des Objekts, inklusive aller referenzierten Objekte, in einen Datenstrom umgewandelt, der anschließend auf ein Speichermedium geschrieben wird.

Nach der Serialisierung liegt ein Objekt mehrfach vor: Als externe Darstellung (z.B.: als Datei) und im Arbeitsspeicher. Wird nach der Serialisierung eine Änderung am Objekt im Arbeitsspeicher vorgenommen, hat dieses keine Auswirkung auf das serialisierte Objekt in der externen Darstellung.

Die Umkehrung der Serialisierung, also die Umwandlung eines Datenstroms in Objekte, wird als Deserialisierung bezeichnet.

Arten: Binäre, XML

17
Q

Was sind Generics und wozu können sie verwendet werden?

A

Generics ermöglichen es Klassen, Methoden, Delegates und Events zu schreiben, die mit mehreren Datentypen verwendbar sind. Man kann mit Constraints festlegen, welche Eigenschaften die verwendeten Datentypen besitzen müssen.

Vorteile:

  • Wiederverwendbarkeit
  • Typsicherheit
  • Performanz

Werden Häufig für Collection Klassen verwendet (Listen, Arrays, Stack, Dictionary,..). Immer nur ein Datentyp, man kann nicht mischen. List<t></t>

18
Q

Was sind Interfaces und wofür werden sie verwendet?

A

Interface beschreibt eine Schnittstelle

  • Interfaces sind „Vereinbarungen“ zwischen Objekten damit sie miteinander interagieren können ohne Wissen über die konkrete Implementierung haben zu müssen.
  • Eine Schnittstelle (englisch interface) dient in der objektorientierten Programmierung der Vereinbarung gemeinsamer Signaturen von Methoden, die in unterschiedlichen Klassen implementiert werden. Die Schnittstelle gibt dabei an, welche Methoden vorhanden sind oder vorhanden sein müssen.
  • Ein Beispiel ist IComparable. Jede Klasse die das Interface implementiert kann eine eigene Logik für den Vergleich in der CompareTo Methode implementieren.
  • enthält
    • Methoden, Properties
    • Events
    • keinen Code
  • Member sind automatisch
    • public
    • abstract
  • Implementierung
    • durch Klassen oder Struktur
  • Mehrfachvererbung zwischen Interfaces möglich
  • Implizitie Implementierung
    • automatisch durch Definition aller Methoden und Properties
    • die Schnittstelle ist nach außen hin sichtbar
  • Explzite Implementierung
    • durch explizite Angabe der Interface-Methode/Property
    • die Schnittstelle ist nach außen hin nicht sichtbar
    • Interface-Members können nur über Interface-Variable aufgerufen werden