2016-09-28 14 views
1

未知のクラスからメソッドを呼び出すことは可能ですか?未知のクラスのメソッドを呼び出す

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

私はそれがダウン投票しなければならない理由の説明がありますか? –

+0

ダウングレードはなぜですか?誰によって? – ipavlu

+0

はい、可能ですが、コードは正常です。あなたはどんな問題に直面していますか? – Heinzi

答えて

2

これは動作するはずです:

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) })の使用を検討する必要があります。
Documentation: GetMethod(string name, Type[] types)

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}); 

は、私が何かを見逃していましたか?これが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 }); 
    } 

}

とうん、パラメータが送信されるに関連していない呼び出し(クライアント、本)を呼び出す必要