772 lines
25 KiB
Markdown
772 lines
25 KiB
Markdown
Fragenkatalog IT12/ AE, Schuljahr 2020/2021
|
|
|
|
Theorie:
|
|
**Windows Grundlagen:**
|
|
|
|
1. Welche Bedeutung hatte die Einführung grafischer Benutzeroberflächen für die Verbreitung von PCs?
|
|
|
|
- Die PCs wurden damit für die Massen einfach zu benutzen und verbreiteten sich deshalb sehr gut seit es GUIs gibt
|
|
|
|
|
|
2. Nennen Sie drei Merkmale von Windowsprogrammen!
|
|
|
|
- Oft mit .NET, C++, C# programmiert
|
|
- Benutzen die WindowsAPI
|
|
- Alle Benutzereingaben werden zuerst von Windows abgefangen und dann an das Programm gesendet für das es bestimmt war
|
|
|
|
|
|
3. Erläutern Sie den Unterschied zwischen einem Programm und einem Prozess!
|
|
|
|
- Ein Prozess kann Bestandteil eines Programms sein, es ist die bestimmte Aufgabe, die ausgeführt wird
|
|
- Ein Programm ist eine passive Entität, z.b. eine ausführbare Datei
|
|
- Ein Programm ist eine Bündelung vieler Prozesse um Funktionalität zu bieten
|
|
|
|
|
|
4. Was versteht man unter einer „Instanz eines Programms“?
|
|
|
|
- Jedes mal beim ausführen eines Programms, wird eine "Instanz" des Programms gestartet
|
|
- Beispielsweise: Visual Studio 2x öffnen => 2 voneinander unabhängige Instanzen von Visual Studio laufen
|
|
|
|
|
|
5. Beschreiben Sie die Aufgaben des Windows Betriebssystems, wenn eine neue Anwendung gestartet wird!
|
|
- zuerst wird in WinMain eine Fensterklasse während der Initialisierung erstellt
|
|
- Fensterklasse (als Structure vordefiniert) muss mit Infos zum Fenster und zu der Fensterfunktion gefüllt werden
|
|
- Fenster wird mit CreateWindow() erzeugt und mit ShowWindow() angezeigt
|
|
- UpdateWindow() aktualisiert die Anzeige
|
|
|
|
|
|
6. Beschreiben Sie die Aufgaben des Windows Betriebssystems, wenn eine Anwendung geschlossen wird!
|
|
- Benutzereingabe bekommt einen Eintrag in der Application-Queue
|
|
- Message Loop verarbeitet die Eingabe
|
|
- Windows wird angewiesen die Logik zur Programmbeendung auszuführen (Fenster schließen,
|
|
Programminstanz beenden, Speicher freigeben...)
|
|
|
|
|
|
7. Weshalb können unterschiedliche Anwendungen in Win32 nicht über Zeiger auf die gleiche Speicheradresse miteinander kommunizieren?
|
|
|
|
- Weil jeder Prozess seinen eigenen „Speicherraum“ besitzt und nicht auf Speicher eines anderen Prozesses zugreifen kann (Sandbox)
|
|
|
|
|
|
8. Welche Vorteile bieten multithreadingfähige Systeme?
|
|
|
|
- Abarbeitung mehrer Prozesse „gleichzeitig“
|
|
- „schneller“ (Effektiver Einsatz der CPU)
|
|
- Schnelle (low-latency) Kommunikation zwischen mehreren Prozessen eines Programms
|
|
|
|
|
|
--> https://docs.oracle.com/cd/E19455-01/806-3461/6jck06gqj/index.html
|
|
--> https://zone.ni.com/reference/de-XX/help/371361R-0113/lvconcepts/benefits_multi_apps/
|
|
|
|
|
|
9. Unterschied zwischen kooperativem und Preemptivem Multitasking?
|
|
|
|
Kooperatives Multitasking:
|
|
- gibt die volle CPU-Kontrolle an den auszuführenden Prozess ab und erhält sie erst
|
|
nach erfolgreicher abarbeitung des Prozesses wieder. (Crash-Problem z.B. unter DOS)
|
|
|
|
Preemptives Multitasking:
|
|
- System kann jederzeit (nach Ausführung jedes CPU-Befehls) die Kontrolle
|
|
über die CPU entziehen
|
|
|
|
|
|
10. Warum können „abgestürzte“ DOS-Programme das ganze OS Lahmlegen?
|
|
- wegen kooperativem Multitasking, das die volle Kontrolle der CPU an den Prozess abgibt
|
|
|
|
|
|
11. Abarbeitung einer Tastatureingabe über die Message Loop:
|
|
```
|
|
1. User drückt Taste
|
|
2. Eintrag des Ereignisses in die System-Queue
|
|
3. Eintrag in die Application-Queue
|
|
4. Message Loop verarbeitet das Ereignis
|
|
5. Windows wird angewiesen, die Fensterfunkton aufzurufen
|
|
6. Fensterfunktion reagiert auf die Tastatureingabe
|
|
```
|
|
|
|
12. Welche Aufgabe erfüllt die Fensterfunktion WinProc()?
|
|
|
|
Eine Art Event-Handler des Fensters der die eingehenden Botschaften empfängt und verarbeitet
|
|
- Z.B. die Botschaft WM_DESTROY -> Fenster schließen
|
|
- jedes Fenster definiert seine eigene Fensterfunktion
|
|
|
|
|
|
13. Beschreiben Sie den grundsätzlichen Aufbau einer Fensterfuktion unter Win32?
|
|
|
|
- Switch-Case mit verschiedenen Cases um die übergebenen Events zu verarbeiten
|
|
|
|
|
|
14. Bedeutung von Botschaften in ereignisgesteuerten Systemen
|
|
|
|
- Eventlistener greifen die Botschaften auf und entscheiden dann
|
|
anhand der Botschaft den weiteren Ablauf des Programms/Prozesses
|
|
|
|
|
|
15. Nennen Sie vier Schnittstellen für Windows - Programmierer und deren spezielles Anwendungsgebiet?
|
|
|
|
- WinInet - Windows Internet API
|
|
- GDI - Graphics Device Interface
|
|
- WinSock - API zum Zugriff auf Rechnernetz über Sockets
|
|
- TAPI - Telephone API (Fax, ...)
|
|
- COM-API - Für den Zugriff auf COM Schnittstellen
|
|
|
|
|
|
16. Welche Bedeutung hat die API für den Programmierer?
|
|
|
|
- Eine API bietet den Zugriff auf bestimmte vorgefertigte Funktionen an
|
|
- z.b. die CoinAPI zum Abgreifen von Kryptowährungs-Daten
|
|
|
|
|
|
17. Erläutern Sie, welches Wissen ein Windows - Anwendungsentwickler zusätzlich zur Kenntnis der Programmiersprache benötigt
|
|
|
|
- Windows API
|
|
- Fensterfunktion
|
|
- Message Loop
|
|
- .NET
|
|
- COM
|
|
|
|
|
|
18. Die vier Parameter der WinMain()
|
|
|
|
```
|
|
HINSTANCE hInstance, /* handle to current instance */
|
|
HINSTANCE hPrevInstance, /* handle to previous instance */
|
|
LPSTR lpCmdLine, /* pointer to command line */
|
|
int nCmdShow /* show state of window */
|
|
```
|
|
|
|
19. Die Windows API Fensterklasse:
|
|
|
|
- wird zum Beschreiben/Stylen des Fensters benutzt
|
|
|
|
|
|
20. Die Inhalte der Windows Fensterklasse
|
|
|
|
```
|
|
- style Style des Fensters
|
|
- lpfnWndProc Zeiger auf die Fensterfunktion (WndProc())
|
|
- hInstance Handle zur jetzigen Instanz
|
|
- hCursor Handle zu einer Cursor-Resource für Mouse-Moves
|
|
- hbrBackground Hintergrundfarbe des Fensters
|
|
- lpszClassName Pointer zum Klassennamen oder einem Alias dafür
|
|
```
|
|
|
|
|
|
|
|
**Grundlagen des .NET Frameworks**
|
|
21. Zweck der Common Language Runtime
|
|
|
|
```
|
|
- Die CLR übersetzt den MSIL-Code in nativen Code
|
|
- Memory Mangement
|
|
- Code Access security
|
|
- Garbage Collection
|
|
- JIT Compilation
|
|
- Exception Handling
|
|
```
|
|
|
|
22. Wozu dient Garbage Collection
|
|
|
|
- löscht nicht mehr benötigte Objekte/Zeiger zur Laufzeit
|
|
- befreit Speicher vom Prozess und beugt somit Memory Leaks vor
|
|
|
|
|
|
23. Weg vom Quellcode zur Ausführung in .NET
|
|
|
|
- Umwandlung des Code in MSIL
|
|
- Hinzufügen von Metadaten (wird in der gleichen Datei gespeichert)
|
|
- Vor der Ausführung wird MSIL durch den JIT Compiler der CLR in nativen Code übersetzt
|
|
|
|
Logische Schritte:
|
|
Compilation ---> Execution
|
|
Source-Code -> Language-Compiler -> MSIL + Metadaten -> JIT Compiler -> Native Code
|
|
|
|
|
|
24. Zweck der MSIL hinsichtlich hinsichtlich Programmiersprachen übergreifender Entwicklung von Software
|
|
|
|
Um möglichst viele Programmiersprachen/Techniken zu unterstützen wird der Code in MSIL als Zwischen-
|
|
sprache übersetzt.
|
|
|
|
- Da gewisse Teile des .NET Framework offen sind, ist es Drittherstellern möglich eigene Compiler
|
|
für ihre Programmiersprache zu erstellen
|
|
- Somit können in der Theorie alle Programmiersprachen, welche die Vorgaben von
|
|
MSIL (definiert in CLR) einhalten
|
|
|
|
|
|
25. Unterschied Klassenbezeichnung und Namensraum
|
|
|
|
Klassenbezeichnung:
|
|
|
|
Die Klassenbezeichnung ist der Name einer Klasse, die Klasse wird anhand der Klassenbezeichnung
|
|
im Quellcode als Objekt instanziiert.
|
|
|
|
Namensraum:
|
|
|
|
Ein Namensraum (engl. Namespace) ist ein Raum, der mehrere mehrere Klassen in ein Paket
|
|
zusammenfasst, um im Code Struktur und Ordnung zu gewährleisten. Diese Namensräume können
|
|
somit importiert werden um gewisse Teile des Codes voneinander abzugrenzen.
|
|
|
|
|
|
26. Zugriff auf eine bestimmte Klasse in einem Namensraum
|
|
|
|
- Anhand des Schlüsselworts "using" wird ein Namespace im Code eingebunden
|
|
- Auf die Klasse wird dann zugegriffen, wenn ein neues Objekt aus ihr instanziiert wird
|
|
|
|
Beispiel:
|
|
|
|
Import des Namespace: using System.IO.File;
|
|
|
|
Instanziierung der Klasse als Objekt: File datei = new File();
|
|
|
|
|
|
27. Basisklasse aller .NET Klassen
|
|
|
|
- Object
|
|
|
|
|
|
28. Zwei Arten von Datentypen unter .NET
|
|
|
|
- Char
|
|
- Ganzzahl (int)
|
|
|
|
|
|
29. Unterschied zwischen Reference- und Value-Types
|
|
|
|
- Ein Value-Type ist ein Datentyp, der die Werte direkt speichert
|
|
- Ein Reference-Type speichert nicht direkt Werte, sondern speichert die Adresse des Wertes im Arbeitsspeicher
|
|
z.B. Pointer oder String
|
|
|
|
|
|
30. Was ist Boxing/Unboxing
|
|
|
|
- Beim Boxing wird ein Child-Objekt in sein Parent-Objekt umgewandelt
|
|
- Beim Unboxing wird ein Parent-Objekt in eines seiner Child Objekt umgewandelt
|
|
|
|
Beispiel:
|
|
int i = 1;
|
|
object o = i; // boxing
|
|
int j = (int)o; // unboxing
|
|
|
|
|
|
31. Zweck der CLS
|
|
|
|
- Die CLS definiert die Regeln die von jeder Sprache im .NET Framework befolgt werden müssen
|
|
- Die Sprachen, die CLS befolgen sind CLS Compliant
|
|
-> CLS ermöglicht die Integration und Interoperabilität mehrerer Programmiersprachen im selben Projekt
|
|
|
|
|
|
32. Arten von Assemblies
|
|
|
|
- Private assembly (.dll and .exe are at the same place)
|
|
- Shared assembly(.dll and .exe are at different places)
|
|
- Dynamic assembly (dynamically create)
|
|
- Distributed assembly (in different parts)
|
|
- Satellite assembly (on the network)
|
|
|
|
|
|
33. Was ist der Global Assembly Cache
|
|
|
|
- Der GAC ist ein Verfahren des .NET Frameworks um Versionskonflikte in Programmen vorzubeugen
|
|
- Speichert alle Assemblies mit Name, Versionsnummer und einzigartigem Token
|
|
-> das gleiche Assembly kann mehrere Male gespeichert werden
|
|
|
|
|
|
34. Welche Informationen sind in einer Assembly gespeichert
|
|
|
|
- Name
|
|
- Versionsnummer
|
|
- Token
|
|
|
|
|
|
35. Was ist Side By Side Installation
|
|
|
|
- Mehrere Installationen des selben Assemblies
|
|
|
|
|
|
36. Was ist Probing im .NET Framework
|
|
|
|
- Gibt Anwendungen das Basisverzeichnis für die Common Language Runtime an,
|
|
die beim Laden des Assembly gesucht werden soll
|
|
|
|
|
|
**ADO.NET**
|
|
|
|
37. Connected <> Disconnected Modell
|
|
```
|
|
Connected:
|
|
|
|
- Beständige Verbindung zur Datenbank
|
|
- Daten sind immer aktuell
|
|
- DataReader versichert die beständige Verbindung
|
|
- Mehr Netzwerkauslastung beim Server
|
|
|
|
Disconnected:
|
|
|
|
- Verbindung zur Datenbank nur bei Zugriff
|
|
- mehr Auslastung beim Client, da Daten im Arbeitsspeicher
|
|
- Benutzen von DataSet beim Datenbankzugriff
|
|
```
|
|
|
|
38. DataProvider und DataSet aus ADO.NET
|
|
```
|
|
DataProvider:
|
|
- wird zum Herstellen der Verbindung mit einer Datenbank benutzt
|
|
- führt Befehle auf der Datenbank aus
|
|
- wird im Connected Modell benutzt um Daten aus der Datenbank zu lesen/schreiben
|
|
|
|
DataSet:
|
|
- Kommt beim Disconnected Modell zum Einsatz
|
|
- Bildet die Datenbank ab
|
|
- Dient als Lokaler Speicher der Datenbank auf dem Client
|
|
- ist als Cache für die Daten zu betrachten
|
|
```
|
|
|
|
39. Nachteile der OLE-DB und ODBC.NET DataProvider
|
|
|
|
- Langsamer als native Datenbanktreiber
|
|
- benötigt mehr CPU-Ressourcen
|
|
- weitere Schicht zwischen Programm und Datenbank -> höhere Fehleranfälligkeit
|
|
- Viele OLE und ODBC Treiber in .NET stammen aus der COM zeit und sind veraltet
|
|
|
|
|
|
40. Vor- und Nachteile des Connected- bzw Disconnected Modells
|
|
```
|
|
Connected:
|
|
Vorteile:
|
|
- Daten sind immer aktuell
|
|
- Einfachere Wartung
|
|
Nachteile:
|
|
- Mehr Netzwerkauslastung beim Server
|
|
- Ständige Netzwerkverbindung erforderlich
|
|
|
|
|
|
Disconnected:
|
|
Vorteile:
|
|
- Keine Ständige Netzwerkverbindung erforderlich
|
|
- Weniger Netzwerkauslastung
|
|
- Skalierbarkeit und Performance
|
|
Nachteile:
|
|
- Daten sind nicht aktuell
|
|
- Daten müssen beim Client im Arbeitsspeicher abgelegt werden
|
|
- Konkurrierende Zugriffe
|
|
```
|
|
|
|
41. Einsatzbeispiele von Disconnected- und Connected Modells:
|
|
```
|
|
Connected:
|
|
- Warenwirtschaftssystem
|
|
- Büro/Office Umgebungen
|
|
|
|
Disconnected:
|
|
- Smartphone Apps
|
|
- Außendienstmitarbeiter
|
|
```
|
|
|
|
42. Aufgaben des Connection Objects, Command Objects, Parameter Objects und des DataReader Objects
|
|
```
|
|
Connection Object:
|
|
- stellt eindeutige Verbindung/Sitzung zum Datenbankserver/Datenquelle dar
|
|
- Verbindung mit Server
|
|
|
|
Command Object:
|
|
- eine SQL-Anweisung oder gespeicherte Prozedur die in einer Datenbank ausgeführt werden soll
|
|
|
|
Parameter Object:
|
|
- SQL-Injection Mitigation
|
|
- damit kann man parameterisierte Abfragen erstellen, die WHERE statements obsolet machen
|
|
|
|
DataReader Object:
|
|
- stellt Verfahren zum Lesen eines Vorwärtsstreams von Zeilen in einer Datenbank bereit
|
|
```
|
|
|
|
43. Einschränkungen beim benutzen eines DataReaders:
|
|
|
|
- ReadOnly / ForwardOnly Zugriff
|
|
- nur für schnelles, einmaliges Lesen geeignet
|
|
|
|
|
|
44. Zusammenarbeit von DataAdapter, DataSet und DataTables im Disconnected Modell:
|
|
```
|
|
- DataAdapter verfügt über SELECT command - Object welches Daten aus der DB holt
|
|
- die Fill-Methode des DataAdapter erwartet als Parameter ein DataSet
|
|
und einen Namen für das zu erstellende DataTable Objects
|
|
- erzeugung im jeweils übergebenen DataSet ein DataTable Object
|
|
- beim Update der DB wird je nach Änderung das INSERT, UPDATE oder DELETE Command des DataAdapters aufgerufen
|
|
- DataAdapter stellt das Bindeglied zwischen DataSet Tabelle und DB dar
|
|
- pro DataTable eines DataSets gibt es idR. einen DataAdapter
|
|
```
|
|
|
|
45. Die 4 Command Objecte eines DataAdapters
|
|
|
|
SELECT Command-Object:
|
|
- Lesen von Daten aus der DB
|
|
UPDATE Command-Object:
|
|
- Ändern von Datensätzen
|
|
INSERT Command-Object:
|
|
- Einfügen neuer Datensätze
|
|
DELETE Command-Object:
|
|
- Löschen von Daten
|
|
|
|
|
|
46. Collections und Objekte eines DataSets
|
|
|
|
- Tables
|
|
- Columns
|
|
- Constraints
|
|
- Rows
|
|
- Relations
|
|
|
|
|
|
***SEE SHARP PROGRAMMIERUNG***
|
|
|
|
47. Abfangen von Ereignissen unter C#
|
|
|
|
- Eventhandler registrieren um auf Ereignisse zu reagieren
|
|
- Delegate Prinzip (objektorientierte Variante von Methodenzeigern)
|
|
|
|
|
|
48. Eventhandling unter .NET am Beispiel eines Klicks auf einen Button
|
|
|
|
EVENT(click)
|
|
Button BtnBeispiel -> Delegate -> Handler-Methode
|
|
|
|
|
|
49. Syntax von c# Eventhandling unter .NET
|
|
|
|
BtnBeispiel.click() += new System.EventHandler(BtnBeispiel_Click);
|
|
|
|
private void BtnBeispiel_Click(object sender, System.EventArgs e) {
|
|
// do Button shit
|
|
}
|
|
|
|
|
|
50. Parameter einer Handler - Methode:
|
|
```
|
|
Object sender:
|
|
- der sender des Events (der Button in unserem Beispiel)
|
|
- Komplettes Button Objekt inkl seiner Eigenschaften usw.
|
|
|
|
System.EventArgs e:
|
|
- Eigenschaften des Events
|
|
- z.B.: Koordinaten des Klick Events f
|
|
```
|
|
|
|
51. Events eines Windows Forms:
|
|
|
|
- Click
|
|
- FormClosing
|
|
- Touch
|
|
|
|
52. Parameter der Show Methode von MessageBox
|
|
```
|
|
- owner | Implementierung von IWin32Window, wird Besitzer des Dialogfeldes
|
|
- text | Text im Fenster
|
|
- caption | Titel in der Fensterleiste
|
|
- buttons | Ja/Nein/Abbrechen etc. buttons
|
|
- icon | Symbol im Meldungsfenster
|
|
- defaultButton | Standardbutton von buttons
|
|
- options | Anzeige- und Zuordnungsoptionen
|
|
- helpFilePath | Pfad für die Hilfedatei, wenn auf "Hilfe" geklickt wird
|
|
- keyword | Hilfestichwort
|
|
```
|
|
|
|
53. Einsatz der FileSystemWatcher Komponente
|
|
|
|
- Überwachung von Dateien bzw. Ordnerstrukturen
|
|
- Löst ein Ereignis aus bei Änderungen
|
|
|
|
-> Übergabe von verschiedenen Eventhandlern an den FileSystemWatcher
|
|
Beispielsweise Changed, Created, Deleted, Renamed
|
|
|
|
54. Eigenschaften und Methoden eines Exception Objekt
|
|
```
|
|
- Das Exception Objekt wird in try - catch Blöcken verwendet
|
|
und wird zum Behandeln von Ausnahmen in der Programmlogik verwendet
|
|
|
|
Eigenschaften:
|
|
- Stacktrace
|
|
- Message
|
|
|
|
Methoden:
|
|
- GetBaseException | Gibt Exception zurück bei einem von Exception abgeleitetem Objekt wie z.B. IOException
|
|
- GetObjectData | Setzt die SerializationInfo
|
|
- GetType | Gibt den Typ der Exception zurück wie z.B. IOException
|
|
- ToString | Gibt die Exception Message als String zurück
|
|
```
|
|
|
|
55. Exception Handling Erklärung
|
|
|
|
- Mit try - catch kann man eine Exception abfangen
|
|
- Im try Block ist der Code, der möglicherweise eine Ausnahme auslöst und wird in catch abgefangen
|
|
- Der catch Block wird üblicherweise zum Logging der Exception verwendet, oder die Exception wird weiterverarbeitet
|
|
- mit *throw new Exception()* kann man absichtlich eine Exception auslösen
|
|
|
|
|
|
56. Eigene Exception erstellen
|
|
|
|
- Klasse von Exception (oder abgeleiteter Exception Klasse) ableiten
|
|
- Konstruktor der Basisklasse für die Fehlermeldung nutzen
|
|
|
|
public class myException: System.Exception
|
|
{
|
|
public myException():base(“Spezielle Fehlermeldung”)
|
|
{
|
|
...
|
|
}
|
|
}
|
|
|
|
|
|
57. Vorteile des Structured Exception Handling
|
|
|
|
- Trennung von Programm und Fehlerlogik
|
|
- genaue Fehlerbeschreibung inkl Zusatzinformationen
|
|
- abfangen mehrerer Exceptions möglich
|
|
|
|
|
|
58. Serialisierung/Deserialisierung
|
|
```
|
|
Unter Serialisierung versteht man das Speichern eines Objektes auf einem beständigen Speichermedium und das Wiederherstellen des Objektes anhand seiner Daten im Programm.
|
|
(Deserialisierung)
|
|
|
|
-> https://stackoverflow.com/questions/3042665/what-is-the-meaning-of-serialization-in-programming-languages
|
|
```
|
|
|
|
59. Unterschiede zwischen Binary und XML Serialisierung
|
|
|
|
XML:
|
|
- Overhead durch XML Tags
|
|
- lesbarer Code -> flexibel
|
|
- nur public Elemente werden serialisiert
|
|
|
|
Binary:
|
|
- schnell lesbar, klare Datei
|
|
- Binärformat ist unflexibel
|
|
- private Elemente werden mitserialisiert
|
|
|
|
|
|
60. Erstellung einer serialisierten Klasse
|
|
|
|
[Serializable]
|
|
public class SerializableClass {
|
|
public int Aersche = 15;
|
|
public int x = 0;
|
|
public String str = null;
|
|
}
|
|
|
|
|
|
61. Umsetzung der binären Serialisierung | https://www.guru99.com/c-sharp-serialization.html
|
|
|
|
- Serializable Klasse erstellen
|
|
- Objekt von Serializable Klasse erstellen und den Attributen Werte zuweisen
|
|
- BinaryFormatter erstellen
|
|
- Beispielszenario: Stream öffnen zum Lesen der Datei die serialisiert werden soll
|
|
- Mit BinaryFormatter.Serialize eingelesenen Stream und Serializable Objekt serialisieren
|
|
- Stream schließen mit .Close()
|
|
|
|
|
|
62. Implementierung von XML Serialisierung
|
|
```
|
|
MyClass obj1 = new MyBeispiel( );
|
|
XmlSerializer s = new XmlSerializer(typeof(MyBeispiel));
|
|
FileStream fs;
|
|
|
|
// Serialisieren
|
|
fs = new FileStream(@"C:\test.txt", FileMode.Create);
|
|
s.Serialize(fs, obj1);
|
|
fs.Close( );
|
|
|
|
// Deserialisierung
|
|
fs = new FileStream(@"C:\test.txt", FileMode.Open);
|
|
MyClass obj2 = (MyClass) s.Deserialize(fs);
|
|
fs.Close( );
|
|
```
|
|
|
|
|
|
63. DataBindingSource Objekt
|
|
|
|
Die BindingSource Komponente dient vielen Zwecken.
|
|
Das Binden von Steuerelementen in einem Formular an Daten wird vereinfacht,
|
|
indem Währungsverwaltung, Änderungs Benachrichtigung und andere Dienste zwischen
|
|
Windows Forms Steuerelementen und Datenquellen bereitgestellt werden.
|
|
|
|
DataSetTabelle --- DataBindingSource Objekt --- Steuerelement
|
|
|
|
|
|
64. Simple und Complex Binding von Steuerelementen
|
|
|
|
Beim simple binding bindet man nur eine Eigenschaft an einen
|
|
Datensatz (z.B. die Text-Property eines Textfeldes an den Namen des Personenobjekts).
|
|
Verwendet man das complex binding, so werden mehrere Datensätze an ein Steuerelement
|
|
gebunden (z.B. alle Daten mehrerer Datensätze an ein DataGrid oder alle Namen an eine ComboBox).
|
|
|
|
|
|
65. BindingNavigator Objekt
|
|
|
|
The BindingNavigator control represents a standard way
|
|
to navigate and manipulate data on a form. It is a special-purpose
|
|
ToolStrip control for navigating and manipulating controls on the Windows Form.
|
|
|
|
In most cases, a BindingNavigator is combined with a BindingSource control to
|
|
move through data records on a Windows Form. It is easy to modify the
|
|
BindingNavigator component if you want to add additional or alternative
|
|
commands for the user.
|
|
|
|
A BindingNavigator is:
|
|
|
|
- a VCR (video-cassette recorder) control which is used with BindingSource.
|
|
- based on ToolStrip.
|
|
- extensible and pluggable.
|
|
|
|
|
|
66. Zweck einer DAO Klasse
|
|
```
|
|
DAO - Klasse (Data Access Object):
|
|
- Entwurfsmuster das den Zugriff auf unterschiedliche Arten von Datenquellen
|
|
- Muster für die Gestaltung von APIs
|
|
- Datenadapter der Applikation
|
|
- speichert z.b. Daten in einer privaten List Collection
|
|
- ist für die Serialisierung und Deserialisierung zuständig
|
|
- meist werden Methoden wie SaveData() ausprogrammiert
|
|
|
|
-> Data Access Object Klassen kapseln die Serialisierung/ Deserialisierung von Objekten.
|
|
Programmlogik und Datenverwaltung sind getrennt!
|
|
```
|
|
|
|
|
|
67. Aufgabe des Gerätekontextes beim Druck in C#
|
|
|
|
- Graphics Eigenschaft der Klasse PrintPageEventArgs
|
|
- Informiert den Drucker welche Art von Grafiken gedruckt werden
|
|
```
|
|
private void printDocument1_PrintPage(object sender,
|
|
System.Drawing.Printing.PrintPageEventArgs e)
|
|
{
|
|
e.Graphics.FillRectangle(Brushes.Blue,
|
|
new Rectangle(100, 150, 250, 250));
|
|
}
|
|
```
|
|
|
|
Der Gerätekontext stellt eine einheitliche Schnittstelle zur Ausgabe von Daten auf Ausgabegeräte
|
|
bereit („virtuelle Zeichenleinwand“). Somit wird eine hardwareunabhängige Ausgabelogik im
|
|
Programm möglich.
|
|
|
|
|
|
68. Warum funktioniert die Druckvorschau ohne installierten Drucker nicht?
|
|
|
|
Weil kein Druckertreiber verfügbar ist.
|
|
|
|
|
|
69. Prinzipieller Druckvorgang unter C#
|
|
|
|
Druckvorgang:
|
|
SIEHE "Zusammenfassung zum Adressbuch3 TA.pdf"
|
|
|
|
1 PrintDocument Object erzeugen
|
|
```
|
|
PrintPage Event -> Handler-Methode für Drucklogik
|
|
PrintPageEventArgs:
|
|
PageSettings Property des PrintDocuments (Seiteneinstellungen)
|
|
Graphics Object (Device Context)
|
|
HasMorePages Property (true setzen, wenn noch weitere Seiten gedruckt werden sollen…)```
|
|
2 Seitenränder setzen
|
|
-> PageSattings Objekt -> Margins… (Left, Rightt, Top, Bottom) setzen.
|
|
3 Bedruckbaren Bereich ermitteln
|
|
-> PrintPageEventArgs e -> MarginBounds… (Left, Rightt, Top, Bottom) nutzen.
|
|
|
|
4 Schriftarten erstellen
|
|
-> Im .NET Framework nutzt man die Font Klasse zum Erstellen von Schriften:
|
|
```
|
|
Font headerFont = new Font ("Arial",18, FontStyle.Bold);
|
|
```
|
|
|
|
5 Schriftarten messen zur Positionsberechnung
|
|
-> Über das Graphics Objekt können Schriften gemessen werden.
|
|
MeasureString(String text, Font font)… (Width, Height)
|
|
|
|
```
|
|
float headerWidth = g.MeasureString(header, headerFont).Width;
|
|
```
|
|
|
|
6 DrawString(...) des Graphics Objects
|
|
-> Zeichnet einen String an die angegebene Position auf den Device Context.
|
|
```
|
|
g.DrawString(text, schrift, brush, xPosition, yPosition);
|
|
```
|
|
|
|
|
|
70. Welche Elemente sind in PrintPageEventArgs
|
|
|
|
Eigenschaften:
|
|
- Cancel
|
|
- Graphics
|
|
- HasMorePages
|
|
- MarginBounds
|
|
- PageBounds
|
|
- PageSettings
|
|
|
|
Methoden:
|
|
- Equals(Object)
|
|
- GetHashCode()
|
|
- GetType()
|
|
- MemberwiseClone()
|
|
- ToString()
|
|
|
|
|
|
71. Benutzerdialoge zur Druckunterstützung
|
|
|
|
- PrintDialog
|
|
- PrintPreviewDialog
|
|
- PageSetupDialog
|
|
|
|
|
|
72. Einrichten von Seitenränder
|
|
|
|
Seitenränder setzen
|
|
-> PageSettings Objekt -> Margins… (Left, Right, Top, Bottom) setzen
|
|
|
|
|
|
73. Vorgehensweise zum Ermitteln des bedruckbaren Bereichs
|
|
|
|
Bedruckbaren Bereich ermitteln
|
|
-> PrintPageEventArgs e -> MarginBounds… (Left, Right, Top, Bottom) nutzen
|
|
|
|
|
|
74. Initialisierung einer Schriftart
|
|
|
|
Schriftarten erstellen
|
|
-> Im .NET Framework nutzt man die Font Klasse zum Erstellen von Schriften:
|
|
```
|
|
Font headerFont = new Font ("Arial",18, FontStyle.Bold);
|
|
```
|
|
|
|
|
|
75. Höhe und Breite eines Textes zur Textpositionierung berechnen
|
|
|
|
- Graphics.MeasureString() verrechnet Font mit String
|
|
->This method returns a SizeF structure that represents
|
|
the size, in the units specified by the PageUnit property,
|
|
of the string specified by the text parameter as drawn
|
|
with the font parameter.
|
|
|
|
|
|
76. DrawString Funktionsweise
|
|
|
|
Draws the specified text string at the specified location with the specified Brush and Font objects.
|
|
```
|
|
Parameter:
|
|
String s | String der gezeichnet werden soll
|
|
Font font | Text Format des Strings
|
|
Brush brush | Farbe und Textur des gezeichneten Text
|
|
Single x | x Koordinate des Text
|
|
Single y | Y Koordinate des Text
|
|
```
|
|
|
|
|
|
Legende:
|
|
|
|
- MSIL : Microsoft Intermediate Language (auch CIL - Common Intermediate Language)
|
|
- CLR : Common Language Runtime
|
|
- CLS : Common Language Specification
|
|
- JIT : Just in Time
|
|
- COM : Component Object Model
|
|
- DAO : Data Access Object
|