• ベストアンサー

InvokeMemberメソッドとは何をするメソッドでしょうか?

はじめまして、質問です。 C#のソースコードで、「Type.InvokeMember メソッド」というのを使っている箇所があるのですが、 これがいったい何をするメソッドなのかよく分かりません。 msdnのヘルプでは、 「指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバを呼び出します。 」 と言っていますが、知識不足で理解できていません。 ネットで検索しても参考になりそうなものが引っかからない状況です。 実際に使用している箇所のソースコードは以下のような感じです。 private void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e) { Object o = e.pDisp; Object oDocument = null; oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null); o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null); 中略 } ご存知の方がいらっしゃいましたら宜しくお願い致します。 何か参考になるURLや、このように調べるべきだなどのアドバイスなどもありましたら、 ぜひお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

InvokeMemberはリフレクションの機能の一つです。 ※参考:http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3 インスタンスの型名が決まっていない状態で 文字列でメソッドを呼び出したりプロパティを呼び出したり、或いはインスタンスの生成を行う事ができます。 下記TestA、TestBというクラスがありDocumentという名前は同じですが 全く別のプロパティです。InvokeMemberを使えば 文字列として"Document"を与えることでそれぞれのプロパティを呼び出すことできます。 using System; using System.Reflection; class Program {   class TestA   {     public String Document     {       get { return "a"; }     }   }   class TestB   {     public String Document     {       get { return "b"; }     }   }   static void test(Object o)   {     String s = (String)o.GetType().InvokeMember("Document", BindingFlags.GetProperty, null, o, null);     System.Console.WriteLine(s);   }   static void Main(string[] args)   {     TestA a = new TestA();     TestB b = new TestB();     test(a);     test(b);   } } ■実行結果 a b

gawein193
質問者

お礼

ご回答ありがとうございます! そうですか、 > 文字列として"Document"を与えることでそれぞれのプロパティを呼び出すことできます。 ということなんですね。 参考URLもありがとうございました。 まだ未熟で検索してもうまくひっかからなくて困っていました。 サンプルもわかりやすくのせていただき助かりました。 ありがとうございます。

その他の回答 (1)

回答No.1

 こんにちは。  C#は知らないのですが、参考になりそうなリンクを張っておきます。  想像の領域ですがリンクを参考して考えると oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null); ↓ oDocument = o.Document;  という事でしょうか。

参考URL:
http://dobon.net/vb/dotnet/programing/typeinvokemember.html
gawein193
質問者

お礼

お返事が遅れてすみません。 URL、参考になりました。 ありがとうございました!

関連するQ&A