Common Language Runtime

Beispiel 1:
1.	Erklären Sie mindestens fünf wesentliche Aufgaben der Common Language Runtime (CLR).
2.	Was ist der Unterschied zwischen IL-Code (Intermediate Language) und Native Code?
3.	Was ist der Unterschied zwischen managed und unmanaged Code?
4.	Was ist das Common Type System (CTS) und welche Bedeutung hat es?
5.	Kann eine .NET .dll gleichzeitig Metadaten und ein Manifest enthalten?
6.	Was sind Strong Names? Wofür werden sie benötigt? Wie werden sie erzeugt und verwendet?
Beispiel 2:
Schreiben Sie in C# eine Methode „Identify“, der Sie Instanzen von selbst definierten Klassen als Parameter vom Typ object übergeben. Der Rückgabewert von „Identify“ soll den vollständig qualifizierten Klassennamen der übergebenen Instanz liefern.
Beispiel 3:
Ändern Sie das Hello World Programm so, dass statt der Win32 API Funktion „MessageBoxA“ die Funktion „MessageBoxW“ verwendet wird und der Output lesbar ist.

using System.Runtime.InteropServices;

class HelloWorld {
  [DllImport("user32.dll")]
  public static extern int MessageBoxA(int h, string m, string c, int type);

  public static int Main() {
    return MessageBoxA(0, "Hello World!", "CLR Interop Services", 0);
  }
}

Hinweis: MessageBoxA verwendet für die beiden String Parameter m und c den Standardtyp LPTStr und MessageBoxW den zwei-Byte Unicode Typ LPWStr.
Beispiel 4:
Das Programm Client.exe soll eine neuere Versionen des shared assemblies Employee.dll verwenden.  Dazu wird im Verzeichnis von Client.exe die Datei Employee.dll.config angelegt:

<?xml version="1.0" ?>
<configuration>
	<runtime>
		<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
			<dependentAssembly>
				<assemblyIdentity name="Employee"
                                            publicKeyToken="32179c8ccd455d11" />
				<bindingRedirect  oldVersion="1.0.0.1"
                                            newVersion="2.0.0.1" />
			</dependentAssembly>
		</assemblyBinding>
	</runtime>
</configuration>

Das Assembly Employee.dll wurde in zwei Versionen mit demselben .snk File signiert und im global assembly cache installiert. Im GAC befinden sich jetzt zwei Employee.dll Files mit den Versionen 1.0.0.1 und 2.0.0.1.
Wird das Programm ausgeführt, wird die Version 1.0.0.1 von Employee.dll geladen.
Was stimmt an obiger Konfiguration nicht?