2016-11-18 2 views
0

Ich bin dabei, einige C#/Lua-Schnittstellencodes von einer Lua-Bibliothek zu einer anderen zu verschieben. Also habe ich 50 oder mehr Methodenbindungen, die ich neu schreiben muss, um die neue Bibliotheksbindungsschnittstelle zu verwenden. Die neue Version ist umständlicher und klobiger, hier ist ein Beispiel, wie man eine C# -Methode namens createTable() bindet.C# Wie kann ich diesen delegierten Code verbessern?

// Delegates 
    private delegate LuaTable dlgCreateTable(); 

    public LuaTable createTable() 
    { 
     LuaTable table = luaRuntime.CreateTable(); 
     return table; 
    } 


then I do ........ 
    using (LuaFunction funcWrapper = luaRuntime.CreateFunctionFromDelegate(new dlgCreateTable(createTable))) 
    { 
     luaRuntime.Globals["createTable"] = funcWrapper; 
    } 

Die einzige Methode, die Bibliothek mich für die Bindung gibt, ist luaRuntime.CreateFunctionFromDelegate() so habe ich dieses Konstrukt verwenden.

Dieser Code ist in Ordnung für 1 oder 2 separate Funktionsbindungen, aber es wird sehr hässlich aussehen mit 50 oder so von ihnen nacheinander. Es würde schöner aussehen, wenn ich die Details der Methode irgendwie in eine C# -Tabelle schreiben und dann in einer Schleife über sie hinweg durchlaufen könnte. Wäre es möglich, die createFunctionFromDelegate() -Zeile so zu ändern, dass sie um eine Tabelle herumläuft? Wenn es machbar ist, wie würde dieser Code aussehen?

Dank für irgendwelche Gedanken

Geoff

Antwort

0

Es stellte sich ziemlich einfach erwiesen, dieses zu lösen, ich glaube, ich war zunächst durch die Tatsache Delegierten abschrecken ein wenig verwirrend sein kann.

Dies funktioniert gut, zur Info veröffentlicht.

dann kann ich in Lua eine gebundene Funktion mit einem einfachen Liner zum Beispiel aufrufen.

baseTable.sleep(1500) 

Momentan definiere ich jeden Delegierten manuell.

Vielleicht könnte ich diesen Code ein wenig mehr verbessern, indem ich Reflection verwende, um den Delegaten von der eigentlichen Methode und Methodensignatur zu unterscheiden.

Wenn jemand weiß, wie das geht, würde ich mich über einige Tipps freuen. Danke

Geoff

Verwandte Themen