ModuleResolveEventHandler-Delegat
Stellt die Methode dar, die das ModuleResolve-Ereignis von Assembly behandelt.
Namespace: System.Reflection
Assembly: mscorlib (in mscorlib.dll)
Syntax
'Declaration
<SerializableAttribute> _
<ComVisibleAttribute(True)> _
Public Delegate Function ModuleResolveEventHandler ( _
sender As Object, _
e As ResolveEventArgs _
) As Module
'Usage
Dim instance As New ModuleResolveEventHandler(AddressOf HandlerMethod)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate Module ModuleResolveEventHandler (
Object sender,
ResolveEventArgs e
)
[SerializableAttribute]
[ComVisibleAttribute(true)]
public delegate Module^ ModuleResolveEventHandler (
Object^ sender,
ResolveEventArgs^ e
)
/** @delegate */
/** @attribute SerializableAttribute() */
/** @attribute ComVisibleAttribute(true) */
public delegate Module ModuleResolveEventHandler (
Object sender,
ResolveEventArgs e
)
JScript unterstützt die Verwendung von Delegaten, aber nicht die Deklaration von neuen Delegaten.
Parameter
- sender
Die Assembly, die die Quelle des Ereignisses war.
- e
Die Argumente, die vom Objekt bereitgestellt wurden, das das Ereignis beschreibt.
Hinweise
Beim Erstellen eines Assembly-Delegaten geben Sie die Methode für die Ereignisbehandlung an. Um dem Ereignishandler das Ereignis zuzuordnen, fügen Sie dem Ereignis eine Instanz des Delegaten hinzu. Der Ereignishandler wird bei jedem Eintreten des Ereignisses aufgerufen, sofern der Delegat nicht entfernt wird. Weitere Informationen über Ereignishandlerdelegaten finden Sie unter Ereignisse und Delegaten.
Wenn das Klassenladeprogramm der Common Language Runtime einen Verweis auf ein internes Modul einer Assembly nicht auf normale Weise auflösen kann, wird das Ereignis ausgelöst, um dem Rückruf das Suchen bzw. Laden sowie das Zurückgeben des Moduls zu ermöglichen.
Alle abgeleiteten Klassen von Delegate und MulticastDelegate verfügen über einen Konstruktor und eine Invoke-Methode. Informationen hierzu erhalten Sie im Codebeispiel für Managed Extensions for C++ in der Beschreibung von Delegate.
Beispiel
Das folgende Beispiel veranschaulicht die Ausführungsreihenfolge beim Aufruf eines Ereignishandlers. In diesem Beispiel ist Server1 ein externes Modul der MySample-Klasse.
So kompilieren und führen Sie das Beispiel aus
Öffnen Sie eine Eingabeaufforderung, und navigieren Sie zu dem Verzeichnis, das MySample.cs enthält.
Kompilieren Sie Server1 mit dem folgenden Befehl:
csc /out:subfolder\Server1.netmodule /t:module Server1.cs
Kompilieren Sie MySample mit dem folgenden Befehl:
csc /out:MySample.exe /t:exe /addmodule:subfolder\Server1.netmodule MySample.cs
Führen Sie MySample.exe aus.
Hinweis
Die Moduldatei Server1.netmodule muss sich in einem Unterverzeichnis mit dem Namen "subfolder" befinden, damit dieses Beispiel ordnungsgemäß ausgeführt werden kann.
using System;
using System.Reflection;
public class Server1 : MarshalByRefObject
{
public int trivial()
{
Console.WriteLine ("server1.trivial");
return 1;
}
}
using System;
using System.IO;
using System.Reflection;
class MySample
{
public static int Main(String[] args)
{
Assembly asm1 = Assembly.GetExecutingAssembly();
asm1.ModuleResolve += new ModuleResolveEventHandler (evModuleResolve);
Console.WriteLine("Calling MySample.Test");
Test();
return 0;
}
private static Module evModuleResolve(object sender, ResolveEventArgs e)
{
Console.WriteLine("MySample.evModuleResolve");
FileStream fs = File.Open("subfolder\\Server1.netmodule", FileMode.Open);
byte [] rgFileBytes = new byte [1];
long len = fs.Length;
rgFileBytes = new byte[len];
fs.Read(rgFileBytes, 0, (int)len);
Assembly a = Assembly.GetExecutingAssembly();
Module m = a.LoadModule("Server1.netmodule", rgFileBytes);
return m;
}
private static void Test()
{
Console.WriteLine("Instantiating Server1");
Server1 s = new Server1();
Console.WriteLine("Calling Server1.trivial");
s.trivial();
}
}
Plattformen
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.
Versionsinformationen
.NET Framework
Unterstützt in: 2.0, 1.1, 1.0