- - PR -
Type.GetMethod()でコンストラクタが取得できない
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-06-06 18:18
コンストラクタは以下のように定義されています。
public AAA() { } そして、以下のようにコンストラクタを取得しようと思うのですが nullが返ってきてしまいます。 MethodInfo method = type.GetMethod("AAA", BindingFlags.Public | BindingFlags.Instance); 条件が足りないのでしょうか。 | ||||||||
|
投稿日時: 2006-06-06 18:31
コンストラクタはGetConstructorを使うのでは?
| ||||||||
|
投稿日時: 2006-06-06 18:42
C# では
public AAA() {} ですけど、VB では Public Sub New() End Sub で、AAA なんて名前は出てきませんよ | ||||||||
|
投稿日時: 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がかえってきてしまいます。 | ||||||||
|
投稿日時: 2006-06-06 19:15
TypeDescriptor の存在意義から言って、静的プロパティが取得できないのは別に不思議ではないですね。 // けどドキュメントには一言も書いてないな。 Type.GetProperty で PropertyInfo を取得すればいいでしょう。 | ||||||||
|
投稿日時: 2006-06-06 19:19
コンストラクタのメソッド名はクラス名ではありません。 そんなメソッドはないので見つからない、ということになります。 .ctorだったか(コンストラクタのメソッド名)で探せば出てくると思います。
こんどはTypeDescriptorの方ですね… これはリフレクションと似たような機能を提供しますが、 型の生の情報に直接アクセスするためのものではありません。 そのため、取得できる情報にも色々と条件があります。 ※逆に拡張もされているわけですが。 とりあえず今回に関して言えば、まずTypeDescriptorで取得できる プロパティは、インスタンスのプロパティだけです。 staticなプロパティは取得できません。 staticなプロパティにもアクセスする必要があるなら、 TypeDescriptorではなく通常のリフレクションを使用する必要があります。 | ||||||||
|
投稿日時: 2006-06-06 19:22
>Type.GetProperty で PropertyInfo を取得すればいいでしょう。
これであっさりとできました。 TypeDescriptorもまた見当違いですか。 どうも、勘が悪いというか、勉強不足というか。なさけなくなってきます。 みなさん、ありがとうございました。 |
1