c#如何改进此委托相关代码
本文关键字:代码 何改进 | 更新日期: 2023-09-27 18:18:30
我正在考虑将一些c#/Lua接口代码从一个Lua库移动到另一个Lua库。因此,我需要重写50个或更多的方法绑定来使用新的库绑定接口。新的方法更加笨拙和笨拙,下面是一个如何绑定一个名为createTable()的c#方法的例子。
// 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;
}
库给我绑定的唯一方法是luartime . createfunctionfromdelegate(),所以我必须使用这个构造。
这段代码对于1或2个独立的函数绑定是可以的,但是如果一个接一个地有50个左右的函数绑定,它看起来会很难看。如果我能以某种方式将方法细节放入c#表中,然后在循环中遍历它们,那看起来会更好。是否有可能改变createFunctionFromDelegate()行,使其能够围绕表进行迭代?如果可行,代码会是什么样子?
谢谢你的建议
Geoff
解决这个问题相当容易,我想我最初是被委托可能有点令人困惑的事实所推迟的。
这个工作很好,张贴信息。
Dictionary<string, Delegate> methods = new Dictionary<string, Delegate> {
{ "createTable", new dlgCreateTable(createTable) },
{ "sleep", new dlgLuaSleep(luaSleep) },
{ "testMethod", new dlgTestMethod(testMethod) },
};
LuaTable bfTable = luaRuntime.CreateTable();
luaRuntime.Globals["baseTable"] = bfTable;
foreach (KeyValuePair<string, Delegate> entry in methods)
{
var key = entry.Key;
var value = entry.Value;
using (LuaFunction funcWrapper = luaRuntime.CreateFunctionFromDelegate(value))
{
bfTable[key] = funcWrapper;
}
}
那么在Lua中,我可以用简单的一行代码调用绑定函数,例如
baseTable.sleep(1500)
目前我正在手动定义每个委托。
也许我可以通过使用Reflection从实际方法和方法签名中定义委托来改进这段代码。
如果有人知道如何做到这一点,我将感激一些建议。由于
Geoff