- - PR -
オブジェクトが特定のプロパティを持っているか調べる方法
1|2|3|4
次のページへ»
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-09-28 10:43
先日はTypeOfの件でありがとうございました。
さて、インターフェースをいくつも作っていくと結構大変になってきました。 それで色々思い悩んでいると、 特定のプロパティを持っているかどうかで事足りる場合も少なくないように 思えてきました。 というわけでVB.Netでオブジェクトのインスタンスが特定のプロパティを持っているか調べる方法をどなたかご存知でしょうか? if Myobject.hasPropertyWrite("BackColor") then みたいな書き方ができないものだろうかと考えています。 よろしくお願いいたします。 | ||||||||
|
投稿日時: 2005-09-28 10:53
こんにちは、じゃんぬ です。
いえ、できればインターフェイスの方が安全でわかりやすいです。
リフレクションなんかを調べると幸せになれるかもしれません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-09-28 11:22
じゃんぬねっとさん、ありがとうございました。
リフレクションもざっとですが調べてみました。 感想ですが、確かにインタフェースの方が安全でわかりやすい。です。 お恥ずかしいことですが、インタフェースも継承できることに 先ほど気がついたばかりです。 今のところ、それほど必要性を感じていなかったりしますが 必要性を感じないあたりが根本的な問題だったりするかもしれません。 インタフェースが増えて大変だというのは、そもそもの構造に欠陥があるのかもしれないと考えてみたり、 でも、いや、それはそれでそういうものなのかもしれないなどと考えたりもします。 ちょっと脱線してしまいました。 ありがとうございました。とても参考になりました。 | ||||||||
|
投稿日時: 2005-09-28 11:29
こんにちは、じゃんぬ です。
どこかでも言いましたが、「実行時に型を見たりしなければならない」 こういう条件の分岐は極力避けるべきです。 あまりに多い場合は設計に問題があるとさえ見ています。
ついでなので、わかりやすいページのリンクを貼っておきます。 後から同じ悩みを持った人が、情報を共有できるように... http://dobon.net/vb/dotnet/programing/typegetmember.html _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2005-09-28 11:45
こんにちは。
完全に興味でお訊きしたいので、お答えしたくないのであれば、無視して頂いて結構です。ちょっと参考にしたい、という気持ちからです。 どうやら、実行時に型を判断したいというのが頻発しているようですが、どういう必要性からなのでしょうか? 私自身ももちろん実行時に型を判断したい、と思った事はありますが、そんなに頻発したことがないので、どういう要件なのかなぁと思いまして。
という事みたいですが、それではどのようにインターフェースを使っていたのでしょうか? 冒頭にも述べましたが、不快であれば無視して頂いて結構です。 | ||||||||
|
投稿日時: 2005-09-28 13:04
じゃんぬさん、囚人?さん、ありがとうございます。
実はちょっとしたお絵かきソフトというかVisioみたいなものを作っていまして いろいろなツールを描画しているオブジェクトにドロップできるかの判断をしているのです。 描画オブジェクトはかなり継承構造に気をつけて作ったつもりなのですが どうしてもインタフェースを使う局面が増えるようになっています。 結構マトリクスで考えなくちゃならなくて混乱しそうです。 後付のインタフェースなのでちょっと作業が大変なのは、確かに基本構造に問題があるからに過ぎません。 それでも、インタフェースの数を気にせず増やすというのもためらわれ あーでもないこーでもないと試行錯誤しています。 こんな関数を作ってみました。 Public Shared Function InterfaceCheck(ByVal obj As Object, ByVal Types() As Type) As Boolean Dim t_Type As System.Type If obj Is Nothing Then Return False 'これはTrueがいいのかなぁ? End If For Each t_Type In Types If obj.GetType.Equals(t_Type) Then Return True End If Next Return False End Function 少し改善するかも? VB6のころに比べたらはるかに進歩しているのですが まだまたわからないことだらけです。 | ||||||||
|
投稿日時: 2005-09-28 13:09
ジブです。
ごめんなさい。ソースが左によってしまいました。 以後気をつけます。 | ||||||||
|
投稿日時: 2005-09-28 13:17
なるほど。ありがとうございました。
そんな感じと聞いたら、デザインパターンを適用できまくり!とちょっとテンション上がっちゃいますね^^; null をチェックしているなら、Null Object。 描画オブジェクトが木構造になっているなら、Composite とか。(必ずしも適用するのが最適解ではありませんが) 継承という強力な武器を持っているのに、型チェックするというのはやはり勿体無い気がしますね。 [ メッセージ編集済み 編集者: 囚人 編集日時 2005-09-28 13:20 ] |
1|2|3|4
次のページへ»