- - PR -
そのフィールドが、read onlyであるかどうかを調べる
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-26 20:47
クラスに定義したフィールド変数がreadonly指定されているかどうかを
チェックする方法ありますでしょうか? PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(class1); PropertyDescriptor property = properties.Find("Prop", true); property.IsReadOnly とやることで、プロパティのgetしかないことはチェックできたのですが readonly指定かどうかはチェックできませんでした。 | ||||||||||||
|
投稿日時: 2006-05-26 21:05
readonly なら FieldInfo.IsInitOnly で、const なら FieldInfo.IsLiteral で確認できます。 FieldInfo は Type.GetField で取得します。 | ||||||||||||
|
投稿日時: 2006-05-26 21:40
ありがとうございます。無事できました。
Type.GetMemberを使ってできなかったのであきらめてました。Type.GetField()でしたか。 すいません。リフレクション関連でもうひとつあるのですが privateメソッドは呼べますが、internalクラスを呼び出すことはできるのでしょうか? (別スレかなと思ったのですが関連ということでご容赦ください) | ||||||||||||
|
投稿日時: 2006-05-26 22:11
メソッドの呼び出しと、クラスの呼び出しでは "ますが" にはならないような... "クラスを呼び出す" とは、そのクラスのインスタンスを生成したいということでしょうか? アクセス修飾子が何であろうと、リフレクションでできるはずですが、何に困っているのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-26 22:16
質問が省略されているように思えてなりません。 internalクラスを呼び出す? | ||||||||||||
|
投稿日時: 2006-05-29 09:05
すいません。質問を省略してしまいました。
internal指定をしたクラスのインスタンスを作成して そのメソッドを呼び出したいんです。 (internal指定をしたクラスが、internalであることをチェック、 およびテストコード作成を考えています) ただ、internal指定されているクラスをテストコードから 使用しようとすると「アクセスできない保護レベルになっています。」になってしまいます。 それで、何かよい方法はないものかと質問をしました。 | ||||||||||||
|
投稿日時: 2006-05-29 10:35
internal ということは、別アセンブリからの呼び出しに影響するということもあり、 別アセンブリでテストしてみましたが、問題なく呼び出すことができました。
これは面倒ですね。(多分) アセンブリからロードしたか否か、その他もろもろと分岐しないといけないような気がします。 もしかすると、同一アセンブリだと区別がつかないかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||
|
投稿日時: 2006-05-29 10:59
わざわざコードまでありがとうございます。
呼び出すことはできるみたいですね。 internalのチェックは難しいようですが、よくよく要求をみてみると どうやらpublicでいいみたいなので、申し訳ないです。 internalのチェックはやらないことにしました。 |