从未知类调用方法

本文关键字:方法 调用 未知 | 更新日期: 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 });
   }

}

参数以数组

的形式发送