Beispiel I – C# nutzt Visual Basic.NET Das Beispiel soll an dieser Stelle überschaubar gehalten werden. Ausgangspunkt ist eine Visual Studio.NET Solution, die zwei Projekte enthalten soll:
VBInterface: Ist vom Typ Visual Basic.NET Klassenbibliothek und enthält ein VB.NET Interface.
CSClass: Ist vom Typ Visual C# Konsolenanwendung, implementiert das im ersten Projekt definierte Interface in einer Klasse und stellt ein kleines Codefragment zur Verfügung, das einige Aufrufe an die Testklasse absetzt.
Das Visual Basic.NET Interface Das Interface ist denkbar einfach gehalten und definiert nur einige einfache Methoden:
Public Interface IInterface
Sub SayHello()
Sub PrintText(ByVal Msg As String)
Function GetTime() As DateTime
End Interface
Dieses Interface wird in eine Assembly (Klassenbibliothek, Endung DLL) compiliert. Im Folgenden soll gezeigt werden, was der Visual Basic.NET Compiler (vbc.exe) daraus erzeugt. Dazu wird das Tool IL-DASM aus dem .NET Framework SDK verwendet. Es disassembliert die Datei und zeigt den erzeugten IL-Code an. Im folgenden Listing ist der IL-Code der Schnittstelle IInterface gezeigt:
.class interface public abstract auto ansi IInterface
{
} // end of class IInterface
Die C# Klasse Für die Implementierung des Interfaces soll eine C# Klasse dienen. Dazu ist der Solution ein zweites Projekt hinzuzufügen. In diesem Projekt muss nun ein einfacher Verweis auf das Visual Basic Projekt angelegt werden. Danach können die dort definierten Typen verwendet werden. Das folgende Listing zeigt die Implementierung der C# Klasse:
using System;
namespace CSClass
{
// importiere den Namensraum
// der referenzierten Assembly
using VBInterface;
public class VbInterfaceImpl : IInterface
{
public VbInterfaceImpl()
{
...
}
#region IInterface Member
public void SayHello()
{
Console.WriteLine("Hello!");
}
public void PrintText(string Msg)
{
Console.WriteLine("Printing: {0}", Msg);
}
public DateTime GetTime()
{
return(DateTime.Now);
}
#endregion }
}
Zwischen den hervorgehoben Teilen ist die Implementierung des Interfaces (ebenfalls hervorgehoben) zu sehen. Die C# Klasse erbt nun das VB.NET Interface. Das folgende Listing zeigt den IL-Code der Klassendefinition:
.class public auto ansi beforefieldinit VbInterfaceImpl
extends [mscorlib]System.Object
implements [VBInterface]VBInterface.IInterface
{
} // end of class VbInterfaceImpl
Wie im Listing zu sehen ist, wird dort die Verbindung zum Interface hergestellt. Die Verbindung findet unter Verwendung des Namens der Assembly statt, in der der benötigte Typ definiert ist (in eckigen Klammern). Des Weiteren wird der Typ durch seinen vollständig qualifizierten Namen angegeben (Namensraum + Typname).