可以从一个未知的类中调用一个方法吗?
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
}
答案 0 :(得分:2)
这应该有效:
public void Execute<T>(T client)
{
var method = typeof(T).GetMethod("Send");
method.Invoke(client, new object[] { this });
}
另外,请确保您的对象客户端不具备多种发送方法,否则您应该考虑使用GetMethod("Send", new Type[] { typeof(IPacket) })
。
Documentation: GetMethod(string name, Type[] types)
答案 1 :(得分:2)
只要方法以解释here存在,您就可以调用任何对象的任何方法。
我发现代码示例非常清楚:
// 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});
我错过了什么吗?
答案 2 :(得分:1)
你需要调用Invoke(client,this)而不是Invoke(this),因为这是ClientSampleResponse,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 });
}
}
是的,参数以数组形式发送