- - PR -
VB.NET クラスで条件によりメソッド、プロパティを有効にしたり無効にしたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-02-23 11:03
いつも拝見させていただいてます。さっそくですが、
クラスを作成しているのですが、条件によりメソッド、プロパティを 有効(入力候補に出る)にしたり、無効(入力候補には出ない)にしたりする ことってできるでしょうか? 以下がサンプルソースです。 クラスの初期化(コンストラクト)で区分を取得しています。 ・区分="a"の時 プロパティA、メソッドAprocのみを有効にする ・区分="b"の時 プロパティB、メソッドBprocのみを有効にする 以上ですが、よろしくお願いいたします。 -------------------ソース----------------------- Public Class Test Private m_Kbn as String Public Sub New(ByVal KBN As String) m_Kbn=KBN End Sub 'Aプロパティ Public ReadOnly Property A() As String Get '区分が"a"のときのみ当プロパティを有効にしたい Return "A" End Get End Property 'Bプロパティ Public ReadOnly Property B() As String Get '区分が"b"のときのみ当プロパティを有効にしたい Return "B" End Get End Property 'Aメソッド Public Function Aproc() As Integer '区分が"a"のときのみ当メソッドを有効にしたい Return 1 End Function 'Bメソッド Public Function Bproc() As Integer '区分が"b"のときのみ当メソッドを有効にしたい Return 2 End Function End Class [ メッセージ編集済み 編集者: うめ 編集日時 2004-02-23 11:11 ] | ||||
|
投稿日時: 2004-02-23 11:12
普通、内部で割当先、取得元を切り替えるように作りますけど?
class AAA private pAtClassA private pAtClassB private pKubun public property ClassValue get if pKubun = "A" then return pAtClassA elseif pKubun = "B" then return pAtClassB else throw new exception end if end get 「使う側に混乱させない」のが、作る側の責任ではないでしょうか。設定によって候補で出てきたりで来なかったりすると、混乱すると思います。また、コーディングした後に設定を変更した場合、どうなるのでしょう? | ||||
|
投稿日時: 2004-02-23 11:31
いや、コンストラクタが実行されるのは実行時(デザイナでのフォームの表示とかはとりあえず置いとくとして)で、メソッドの候補を表示するのはコーディング時なのですから、因果関係(というかタイミング)が逆になるわけですから… 実行時にメソッドを無効にしたいということなら、例外にしていいのであればInvalidOperationExceptionでも投げとけばいいかと思いますが… まあ、なんらかの事情があるのかもしれませんが、Jittaさんの仰ることの方を気にした方がいいと思います。 | ||||
|
投稿日時: 2004-02-23 11:42
なちゃさん、Jittaさん。
ご指摘ありがとうございます。 クラスの勉強不足で申し訳ありません。 大変参考になりました。 |
1