Das erfordert eine etwas andere Vorgehensweise, da du sicherstellen musst, dass die Instanz der Klasse Zugriff auf die Funktionen des Hauptprogramms hat. Hier ist ein Beispiel
// C#-Code als Zeichenfolge
string code = @"
using System;
public class CSharpClass
{
private Action<string> externalFunction;
public CSharpClass(Action<string> externalFunction)
{
this.externalFunction = externalFunction;
}
public void Main()
{
Console.WriteLine(""Hello from dynamically generated class!"");
externalFunction(""Calling external function from dynamic class!"");
}
}";
// Compiler-Optionen
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
// Kompilieren des Codes
CSharpCodeProvider provider = new CSharpCodeProvider();
CompilerResults results = provider.CompileAssemblyFromSource(parameters, code);
// Überprüfen auf Kompilierungsfehler
if (results.Errors.Count == 0)
{
    // Erstellen der externen Funktion, die von der dynamisch generierten Klasse aufgerufen wird
    Action<string> externalFunction = message => Console.WriteLine("External function called with message: " + message);
    // Instanz der dynamisch generierten Klasse erstellen und Konstruktorparameter übergeben
    Type dynamicType = results.CompiledAssembly.GetType("CSharpClass");
    dynamic instance = Activator.CreateInstance(dynamicType, externalFunction);
    // Überprüfen, ob die Methode vorhanden ist, bevor sie aufgerufen wird
    MethodInfo mainMethod = dynamicType.GetMethod("Main");
    if (mainMethod != null)
    {
        mainMethod.Invoke(instance, null);
    }
    else
    {
        Console.WriteLine("Die Methode 'Main' wurde nicht gefunden.");
    }
}
else
{
    foreach (CompilerError error in results.Errors)
    {
        Console.WriteLine(error.ErrorText);
    }
}In diesem Beispiel wird die dynamisch generierte Klasse CSharpClass mit einem Konstruktor erstellt, der eine Aktion (Action<string>) als Parameter akzeptiert. Diese Aktion ist die "externe Funktion", auf die du zugreifen möchtest. Bei der Instanziierung von CSharpClass wird die externe Funktion übergeben und später in der Main-Methode der Klasse aufgerufen.