【发布时间】:2022-04-22 00:47:57
【问题描述】:
我正在尝试围绕动态对象创建一个“包装器”,这样我就可以使动态对象上的方法名称与包装类中的方法名称相匹配。
我需要做的是为帮助程序提供一个dynamic 对象,以及我想调用它的方法的名称(通过[CallerMemberName]),以及调用的参数。我不知道如何调用动态对象。我该怎么做?
class Program
{
static void Main(string[] args)
{
var dyn = new ClassWithDynamicProperty();
dyn.SendMessage("test");
Console.ReadKey();
}
}
public class ExampleDynamicClass
{
public void SendMessage(string msg)
{
Console.WriteLine(msg);
}
}
public class ClassWithDynamicProperty
{
public ClassWithDynamicProperty()
{
MyDynObject = new ExampleDynamicClass();
}
public dynamic MyDynObject { get; set; }
public void SendMessage(string theMessage)
{
//i want to replace this:
MyDynObject.SendMessage(theMessage);
//with this:
DynamicHelper.CallDynamic(MyDynObject, new object[] { theMessage });
}
}
public static class DynamicHelper
{
public static void CallDynamic(dynamic source, object[] args, [CallerMemberName]string methodName = null)
{
//source.methodName(args); How can i invoke this?
}
}
【问题讨论】:
-
那么为什么需要动态呢?你可以使用反射不是吗?
-
这只是一个示例。我正在使用具有动态对象的 SignalR。尽管我即将发布,但我找到了一个解决方案。