- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プロパティーの属性取得)
プロパティーの属性取得
このQ&Aのポイント
- クラスのプロパティーの属性を取得する方法について教えてください。
- 特定のクラスのプロパティーにReadOnly修飾子が設定されているかどうかを判定する方法を教えてください。
- プロジェクトで実行時にプロパティーの属性を検出する方法を知りたいです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こういう話? #サイトの都合上色分けおかしいけど気にするな http://ideone.com/clone/q4Ndx
その他の回答 (1)
- todo36
- ベストアンサー率58% (728/1234)
回答No.2
typeof(Boo).GetMember("Foo").IsReadOnly
質問者
お礼
回答ありがとうございます。参考になりました。 がんばってみたのですが、VBやらドットNETやらに不勉強でなかなか意図したとおりにはならなかったですが、GetMemberやMemberInfoなるモノの存在をしりました。GetMembersしてみると、プロパティが、get_Fooになって見えたりとか、おもしろかったです。
お礼
回答ありがとうございました! 私のつたない文章から意図を読み取っていただき、サンプルコードまで書いていただいて、大変感謝しております。これからも、頑張ってください(迷える質問への回答を~)。 ----- Magna
補足
はい、まさしくそのとおりです。 サンプルコードまでいただいて、大変ありがたかったです。実は実行時に例外が発行されて、MSDNとにらめっこしていました。Type.GetType(typeName As String [,…])を使うとき、typeNameに"Boo"を渡すとTypeLoadExceptionが発行されました。僕の環境では、名前空間を含むフルネームで与えないといけないようです。プロジェクト名が"Woo"として、typeNameは、"Woo.Boo"とあたえる事で、所望の結果を得ることができました。下記にいただいたサンプルコードを再掲載します。23行目、29行目が僕の変更点です。 01:Imports System 02: 03:Class Boo 04: Private x As Integer 05: Public ReadOnly Property Foo1() As Integer 06: Get 07: Return x 08: End Get 09: End Property 10: Public Property Foo2() As Integer 11: Get 12: Return x 13: End Get 14: Set(ByVal Value As Integer) 15: x = Value 16: End Set 17: End Property 18:End Class 19: 20:Class HOGE 21: Public Shared Sub Main() 22: Dim p1 As System.Reflection.PropertyInfo _ 23: = Type.GetType("Woo.Boo",true).GetProperty("Foo1") 24: 'p1がNothingであるかどうかのチェックは面倒なので省略 25: System.Console.WriteLine(p1.CanRead) 26: System.Console.WriteLine(Not(p1.CanWrite)) 27: 28: Dim p2 As System.Reflection.PropertyInfo _ 29: = Type.GetType("Woo.Boo",true).GetProperty("Foo2") 30: 'p1がNothingであるかどうかのチェックは面倒なので省略 31: System.Console.WriteLine(p2.CanRead) 32: System.Console.WriteLine(Not(p2.CanWrite)) 33: 34: End Sub 35:End Class ついでではありますが、Class Typeを調べているうちに、GetType演算子を見つけました。こっちを使うと、汎用性は損なわれそうな感じですが、同一プロジェクト内での使用は、比較的簡単みたいに思います。下記のような感じで、クラスBooのPublic修飾の有無やプロパティFoo1のRead/Write属性が取得できました。 01: GetType(Boo).IsPublic 02: GetType(Boo).IsNotPublic 03: GetType(Boo).GetProperty("Foo1").CanRead 04: GetType(Boo).GetProperty("Foo1").CanWrite ----- Magna