dポイントプレゼントキャンペーン実施中!

はじめまして、質問です。

C#のソースコードで、「Type.InvokeMember メソッド」というのを使っている箇所があるのですが、
これがいったい何をするメソッドなのかよく分かりません。

msdnのヘルプでは、

「指定したバインディング制約を使用し、指定した引数リストと照合して、指定したメンバを呼び出します。 」

と言っていますが、知識不足で理解できていません。
ネットで検索しても参考になりそうなものが引っかからない状況です。

実際に使用している箇所のソースコードは以下のような感じです。

private void axWebBrowser1_NavigateComplete2(object sender, AxSHDocVw.DWebBrowserEvents2_NavigateComplete2Event e)
{
Object o=e.pDisp;
ObjectoDocument=null;
oDocument=o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
o.GetType().InvokeMember("Application",BindingFlags.GetProperty,null,oDocument,null);
中略
}

ご存知の方がいらっしゃいましたら宜しくお願い致します。
何か参考になるURLや、このように調べるべきだなどのアドバイスなどもありましたら、
ぜひお願い致します。

A 回答 (2件)

InvokeMemberはリフレクションの機能の一つです。


※参考:http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95% …

インスタンスの型名が決まっていない状態で
文字列でメソッドを呼び出したりプロパティを呼び出したり、或いはインスタンスの生成を行う事ができます。
下記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
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/04 14:21

 こんにちは。



 C#は知らないのですが、参考になりそうなリンクを張っておきます。
 想像の領域ですがリンクを参考して考えると

oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);

oDocument = o.Document;

 という事でしょうか。

参考URL:http://dobon.net/vb/dotnet/programing/typeinvoke …
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/08/04 14:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!