
はじめまして、質問です。
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や、このように調べるべきだなどのアドバイスなどもありましたら、
ぜひお願い致します。
No.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
ご回答ありがとうございます!
そうですか、
> 文字列として"Document"を与えることでそれぞれのプロパティを呼び出すことできます。
ということなんですね。
参考URLもありがとうございました。
まだ未熟で検索してもうまくひっかからなくて困っていました。
サンプルもわかりやすくのせていただき助かりました。
ありがとうございます。
No.1
- 回答日時:
こんにちは。
C#は知らないのですが、参考になりそうなリンクを張っておきます。
想像の領域ですがリンクを参考して考えると
oDocument = o.GetType().InvokeMember("Document",BindingFlags.GetProperty,null,o,null);
↓
oDocument = o.Document;
という事でしょうか。
参考URL:http://dobon.net/vb/dotnet/programing/typeinvoke …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PHP 空文字 "" ですが 空文字の意味を教えてください。 3 2022/08/05 03:51
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「Nz」は何て読むのでしょうか?
-
存在しないデータも抽出したい
-
C言語 dequeue
-
API 録音 MCI
-
C言語
-
C言語で%を使わない余りの出し方
-
c言語 プログラミング
-
複数のアドレスを関数から取得...
-
C言語(高校1年の内容)について
-
C言語の初心者です。これを実行...
-
ランダムアクセスができない
-
「Aに対するBの割合」と「Aに対...
-
templete における typedef
-
構造体の各メンバにfor文からア...
-
constの意味
-
高(1)男子 初めてC言語でコー...
-
数字を入力して配列に格納する...
-
プログラム
-
”0”入力時、else文の中の”Can n...
-
C言語を実行すると-infが出てき...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構造体のリスト削除
-
コールバック関数はnullになら...
-
InvokeMemberメソッドとは何を...
-
C# ref引数のnull判定
-
双方向リストのバブルソートに...
-
C#でのEXCEL出力に関して
-
プログラミング(C#)のエラーに...
-
if文でゼロとNULLを除外するた...
-
PLSQLについて
-
バブルソートを使って文字列を...
-
【C++】ストリームオブジェクト...
-
SQLのIN関数に関して
-
文字列の結合方法(SQL)
-
ばばぬきプログラムについて
-
今度はdoubly linked listの問...
-
API 録音 MCI
-
大学で出されたc言語の課題に...
-
C言語
-
isset — 変数が宣言されている...
-
Aの値からBの値を除するとは??
おすすめ情報