- - PR -
オブジェクトが特定のプロパティを持っているか調べる方法
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-10-01 19:14
囚人さん。ありがとうございます。
うーん、つまりPublicでないという意味だったんですが。。。 クライアントには公開していないという意味で。
はい。でも、そうすると IPaintableにEnablePaintBackGroundを追加せねばならなくなります。 IPaintableが管理する問題ではないと思います。 また、基底のインタフェースやクラスは出来るだけ軽くしたいです。 [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-01 19:15 ] [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-01 19:18 ] [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-01 19:24 ] [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-01 19:24 ] | ||||||||||||||||
|
投稿日時: 2005-10-01 19:39
済みません。 ここで言うクライアントとは、そのクラスを使用する者、つまり、IPaintable を扱うクラス等を指してました。同じアセンブリに属するとか、別のアセンブリに属するとか関係なく、IPaintable を扱うクラス全てです。(自身は含まない)
そうでしょうか? 「バックグラウンドを塗るツール」は「描画クラス」に対して処理を行いたいわけですよね。 「バックグラウンドを塗るツール」は myPaintableCollection(IPaintable のコレクション)しか知りません。 そうなると、「バックグラウンドを塗るツール」が IPaintable に対して何か操作を行うためのインターフェース(ここでのインターフェースは概念の事)が必要となります。 それが、EnablePaintBackGround だと思うのですが。どうでしょう。 しかしながら、
という処理に対して、持ち出した案ですので、本当は私も IPaintable に EnablePaintBackGround をあまり持たせたくありません。 「バックグラウンドを塗るツール」の存在をもう少し吟味した方が良さそうですね。 | ||||||||||||||||
|
投稿日時: 2005-10-01 20:29
「バックグラウンドを塗るツール」は「バックグラウンドを塗れる」オブジェクトを探しているだけです。
まさにそのとおりです。 そしてmyPaintableCollectionはIpaintableには「バックグラウンドを塗れる」ですか?とは聞けません。 myPaintableCollectionはIPaintBackroundAbleな要素を探さなければなりません。
とは出来ないので
みたいなことをしないといけないんではないでしょうか。 [ メッセージ編集済み 編集者: ジブ 編集日時 2005-10-01 20:37 ] | ||||||||||||||||
|
投稿日時: 2005-10-01 20:57
いいえ違います。(設計において「違います」なんて断言なんか出来ませんが^^;
それならば、「バックグラウンドを塗るツール」は最初から IPaintBackroundAble のコレクションしか参照しなければよいのです。 「バックグラウンドを塗るツール」が IPaintable のコレクションを参照するならば、「バックグラウンドを塗るツール」は IPaintable のインターフェースを通してのみ操作できるようにすべきです。つまり EnablePaintBackground。 IPaintable に 背景関係のインターフェイスを持たせられないならば、「バックグラウンドを塗るツール」は IPaintable を参照しないで、IPaintBackroundAble しか扱ってはいけません。 | ||||||||||||||||
|
投稿日時: 2005-10-01 21:13
いえ、囚人さん自身がおっしゃったように
なのです。 そして、ついでですが、myPaintableCollectionはコンテナクラスです。 多くのツールから依頼を受け、少なくともIpaintableな要素に対してはそのサービスを受け入れるか判断しなくてはいけません。 。。。。。。。。 そうか。少しひらめきました。 Ipaintableになにか汎用的な要素を追加できればよいんですね。 ありがとうございます。ちょっと考えてみます。 | ||||||||||||||||
|
投稿日時: 2005-10-01 21:42
なので、
と言っているのです。 しかし、やはり EnablePaintBackground を IPaintable に持たせるのが釈然としないというのも確かです。 いい案が出たようなので、待ってみます。 | ||||||||||||||||
|
投稿日時: 2005-10-01 21:55
釈然としないというより、それを始めたら EnableForColerもEnablemarumaruも。。。。 無限に追加しなくてはならなくなりませんか? | ||||||||||||||||
|
投稿日時: 2005-10-01 22:22
先に言ったとおり、「描画クラス」は Draw() という「描画を行う振る舞い」だけ持つのが良いと私は思っています。 「バックグラウンドを塗るツール」というのと「描画クラス」の関係がイマイチはっきりしないので何ともいえませんが、「バックグラウンドを塗る」というのも「描画クラス」やらせたいです。 つまり、Draw() 処理中に、自分が「バックグラウンドを塗るクラス」であるならば、バックグラウンドを塗ればいいのです。 しかしながら、今「バックグラウンドを塗るツール」というものの存在を前提としているので、IPaintable に EnablePaintBackground が必要である、というわけです。 「色を塗るツール」というものが存在するならば、EnableForColer も必要になるでしょう。 しかし、私の考えは、「描画クラス」の派生クラスが、自分が「色を塗るべきクラス」であるならば Draw() 中に色を塗ればよいのです。 |