- PR -

Type.GetMethod()でコンストラクタが取得できない

1
投稿者投稿内容
頭脳パン
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 89
投稿日時: 2006-06-06 18:18
コンストラクタは以下のように定義されています。
public AAA() { }

そして、以下のようにコンストラクタを取得しようと思うのですが
nullが返ってきてしまいます。
MethodInfo method = type.GetMethod("AAA", BindingFlags.Public | BindingFlags.Instance);

条件が足りないのでしょうか。
YuO
会議室デビュー日: 2005/11/14
投稿数: 11
投稿日時: 2006-06-06 18:31
コンストラクタはGetConstructorを使うのでは?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-06-06 18:42
C# では
public AAA() {}
ですけど、VB では
Public Sub New()
End Sub
で、AAA なんて名前は出てきませんよ
頭脳パン
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 89
投稿日時: 2006-06-06 18:52
GetConstructor()で取得することができました。
ありがとうございます。

MSDNのType.GetMethod ()の↓の文書にだまされました。
コンストラクタおよびメソッドを検索する場合、パラメータは省略できません

すいません。リフレクション関連でもうひとつあるのですが
シングルトンの以下のプロパティも取得することができません。
public static AAA Instance
{
get
{
return instance;
}
}

Type type = typeof(AAA);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(type);
PropertyDescriptor property = properties.Find("Instance", true);
やはり、nullがかえってきてしまいます。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-06-06 19:15

TypeDescriptor の存在意義から言って、静的プロパティが取得できないのは別に不思議ではないですね。
// けどドキュメントには一言も書いてないな。

Type.GetProperty で PropertyInfo を取得すればいいでしょう。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2006-06-06 19:19
引用:

頭脳パンさんの書き込み (2006-06-06 18:52) より:
MSDNのType.GetMethod ()の↓の文書にだまされました。
コンストラクタおよびメソッドを検索する場合、パラメータは省略できません


コンストラクタのメソッド名はクラス名ではありません。
そんなメソッドはないので見つからない、ということになります。
.ctorだったか(コンストラクタのメソッド名)で探せば出てくると思います。

引用:

すいません。リフレクション関連でもうひとつあるのですが
シングルトンの以下のプロパティも取得することができません。
public static AAA Instance
{
get
{
return instance;
}
}

Type type = typeof(AAA);
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(type);
PropertyDescriptor property = properties.Find("Instance", true);
やはり、nullがかえってきてしまいます。


こんどはTypeDescriptorの方ですね…
これはリフレクションと似たような機能を提供しますが、
型の生の情報に直接アクセスするためのものではありません。
そのため、取得できる情報にも色々と条件があります。
※逆に拡張もされているわけですが。

とりあえず今回に関して言えば、まずTypeDescriptorで取得できる
プロパティは、インスタンスのプロパティだけです。
staticなプロパティは取得できません。

staticなプロパティにもアクセスする必要があるなら、
TypeDescriptorではなく通常のリフレクションを使用する必要があります。
頭脳パン
ベテラン
会議室デビュー日: 2003/04/03
投稿数: 89
投稿日時: 2006-06-06 19:22
>Type.GetProperty で PropertyInfo を取得すればいいでしょう。
これであっさりとできました。
TypeDescriptorもまた見当違いですか。
どうも、勘が悪いというか、勉強不足というか。なさけなくなってきます。
みなさん、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)