上下文
我有一个 C# 类 PyroProxy使用 call(string method, params object[] arguments)
方法
public class PyroProxy : IDisposable {
public object call(string method, params object[] arguments)
}
这是远程对象的代理类。
动机
在代码中一直使用 call 方法看起来不太好。
问题
假设 PyroProxy 类没有方法 test_method()
。
我怎样才能让下面的代码工作?
PyroProxy p = new PyroProxy();
p.test_method();
test_method
的代码如下所示
public object test_method(params object[] arguments) {
return call("test_method", arguments); // you get the point
}
这可能是我没有找到的副本,也许在编译时或运行时有可能。我该怎么做才能更接近这个目标?提示表示赞赏。有关于如何注入(inject)方法的答案。我找到了 ExpandoObject但它没有告诉我如何创建未知方法。
最佳答案
您应该派生自 DynamicObject
然后覆盖 TryInvokeMember
方法。
public class PyroProxy : DynamicObject
{
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
Console.WriteLine(binder.Name + " was invoked");
result = call(binder.Name, args);
return true;
}
}
dynamic proxy = new PyroProxy();
proxy.SomeMethod(); //prints "SomeMethod was invoked"
关于c# - 如果不存在则生成方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24365101/