从未知类调用方法
本文关键字:方法 调用 未知 | 更新日期: 2023-09-27 18:09:26
可以从未知的类调用方法吗?
public class ClientSampleResponse : IPacket
{
public string Name { get; set; }
public string Lastname { get; set; }
public string Address { get; set; }
public void Execute<T>(T client)
{
var method = typeof(T).GetMethod("Send");
//method.Invoke(this);
}
}
我正在尝试使用上面的代码从未知类调用此方法:
public void Send<T>(T packet) where T : IPacket
{
// Skip contents
}
应该可以:
public void Execute<T>(T client)
{
var method = typeof(T).GetMethod("Send");
method.Invoke(client, new object[] { this });
}
同时,要确保你的对象客户端没有几个Send方法,否则你应该考虑使用GetMethod("Send", new Type[] { typeof(IPacket) })
。
GetMethod(string name, Type[] types)
你可以调用任何对象的任何方法,只要这个方法存在。
我发现代码示例非常清楚:
// Get the constructor and create an instance of MagicClass
Type magicType = Type.GetType("MagicClass");
ConstructorInfo magicConstructor = magicType.GetConstructor(Type.EmptyTypes);
object magicClassObject = magicConstructor.Invoke(new object[]{});
// Get the ItsMagic method and invoke with a parameter value of 100
MethodInfo magicMethod = magicType.GetMethod("ItsMagic");
object magicValue = magicMethod.Invoke(magicClassObject, new object[]{100});
我错过什么了吗?
您需要调用Invoke(client, this)而不是Invoke(this),因为这是clientsamplerresponse, IPacket与t无关
public class ClientSampleResponse : IPacket
{
public string Name { get; set; }
public string Lastname { get; set; }
public string Address { get; set; }
public void Execute<T>(T client)
{
var method = typeof(T).GetMethod("Send");
method.Invoke(client, new object[] { this });
}
}
参数以数组