![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは、お世話になっています。
日曜プログラムな感じなんですが、自学習でクラス作成しております。作成にあたって、逐次テストプログラムも同時につくっています。そこで、プロパティーの属性についての質問です。コードで任意のプロパティーの属性を取得したり、判定したりすることができるのかどうか・・・です。
たとえば、あるクラス"Boo"のプロパティ"Foo"があったとして、設計意図上【"Foo"はReadOnly修飾子が与えられていなえればならない】としています。このとき、うっかりしたり他者がからんだりで、FooのReadOnly修飾子をはずして、Setブロックを追加してしまった・・・なんて事が起きたとき、発見したいと考えています。蛇足ですが、メンバのプライベートをパブリックにしちゃったとか、勝手に新しいメンバを追加しちゃったとかも・・・
環境は、VB2010Express、.NET2.0、コンソールアプリケーションです。プロジェクト上に テストプログラム兼スタートアップMain()を含むファイルModule1.vbとテスト対象Boo.Fooを含むBoo.vbで構成されたプロジェクトです。希望的には、テストプログラムのランタイム時の検出がうれしいのですが、コンパイル時にエラーを出す等のプリプロセスでもかまいません。
言葉による説明で申し訳ないですが、ご存知の方、レス頂けるとうれしいです。よろしくお願いいたします。
----- Magna
No.1ベストアンサー
- 回答日時:
![「プロパティーの属性取得」の回答画像1](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/7/376365_5497e89007f90/M.jpg)
この回答への補足
はい、まさしくそのとおりです。
サンプルコードまでいただいて、大変ありがたかったです。実は実行時に例外が発行されて、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
回答ありがとうございました!
私のつたない文章から意図を読み取っていただき、サンプルコードまで書いていただいて、大変感謝しております。これからも、頑張ってください(迷える質問への回答を~)。
----- Magna
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
- Visual Basic(VBA) VBプロジェクトでのフォルダ構成について 1 2023/07/22 03:49
- JavaScript プルダウンから1個選んで、豆知識を出すプログラム。 2 2022/06/21 17:27
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- 英語 "over the edge"の修飾語句と位置について 5 2022/12/10 05:46
- 大学受験 AO、総合型選抜出願時に使用する活動実績報告書について 4 2022/06/27 01:21
- その他(ビジネス・キャリア) グーグルの障害者訓練プログラム募集あるがどうだろ?6時間勤務で月収22万!! 1 2023/02/17 20:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Visual Basicでの平方関数について
-
vba 時間の引き算 例えば 15:00...
-
Visual Studio 「AnyCpu」について
-
Designer.vbは直接コードをいじ...
-
タスクスケジューラでPerlが動...
-
C++初心者です。 debug asserti...
-
フォームの最前面が効かない
-
VB.Net リビルド 意味不明なメ...
-
アウトルックが起動しているか...
-
VBAでOutlookを終了させたい Ex...
-
EXCEL VBAから他アプリケーショ...
-
「読み込み違反」が起きたとき...
-
意味不明の実行時エラーで困っ...
-
Windows10のVBAでDirectX 8が使...
-
vbaでPDFファイルが印刷されない
-
Windows PowerShellでC言語を実...
-
Windows上のプログラム。「予め...
-
Using System.Drawing がうまく...
-
オブジェクト(dll)のレジストリ...
-
EXCELファイルの複数ダウンロー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBでUSB制御プログラム作成する...
-
MSCommによるCOMポートの制御
-
九九の答えの計算
-
ミキサーの情報の取得方法を教えて
-
ハンディターミナル
-
vb.netでCreateEventの引数
-
VB2005でスケジュール追加
-
遺伝的アルゴリズムについて教...
-
VBSでサウンドデバイスの変更方...
-
外部装置を扱うプログラムについて
-
コーディングの仕事に必要なも...
-
Android Studio で実行 できま...
-
拡張子に関連ついているプログ...
-
USBシリアルケーブル仕様の通信...
-
プログラム作成ソフトは何をダ...
-
派遣社員ですビジュアルベーシ...
-
美しいソースコード
-
Lotus Notesのカレンダーに外部...
-
CSS Dock Menu[jQuery]について
-
webサイトから自動ダウンロード
おすすめ情報