- - PR -
読み取り専用のハッシュテーブル
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-08-22 19:01
読み取り専用のハッシュオブジェクトを用意したいと思っております。
JavaでいうところのPropertiesオブジェクト相当ものです。 .NETでもありそうなもんですが、見当たらなかったもので。。 そのようなオブジェクトは提供されているのでしょうか? もし提供されていないようであれば何かよい実装方法はありませんでしょうか。 よろしくお願いします。 | ||||||||
|
投稿日時: 2003-08-22 21:52
読み取り専用のプロパティを使えばいいんじゃないでしょうか。
| ||||||||
|
投稿日時: 2003-08-23 04:49
IDictionary.IsReadOnly プロパティですかね? このプロパティって読み取り専用(ややこしい)なんですよね。 コレクションによってはもともと読取専用になっているものもあるかもしれませんが、よく知りません。 | ||||||||
|
投稿日時: 2003-08-23 05:05
どういう用途かという部分が若干気になるんですが(システム、環境により提供されるプロパティ機能のようなものなのか、自分のプログラム内で自由に使いたいのかなど)、とりあえず読取専用に設定できるクラスがあるのかはよく分かりません(というか、知っている限りでは無い様に思います)。 例えばDictionaryBaseを継承して、ReadOnlyなディクショナリを作成するとかになると思います。この場合も、特定のメソッド呼び出しなどのタイミングで読取専用にするのか、最初から読取専用にする(つまり初期化時にしかデータをセットできないようにする)のかなどでやり方や注意点などが変わってきます。 本当に読取専用(クラスのインタフェースレベルで読み取りしか出来ないクラス)にするのなら、Hashtableなどをメンバに持つようにして、新しいクラスを作成する必要があると思われます。この場合はIDictionaryインタフェースを実装できないので、使い勝手に問題が出てくるかもしれません。 どちらにしても、ある程度自作しないと仕方ないように思われます。 | ||||||||
|
投稿日時: 2003-08-24 14:57
なぜIDictionaryインタフェースを実装できないのでしょうか? IsReadOnlyプロパティはTrueを返す、 Add/Remove/ClearメソッドはNotSupportedExceptionを上げる、 といったような実装で実現できませんか? --編集による追記-- ItemプロパティのセッターもNotSupportedExceptionを上げないといけませんね。 [ メッセージ編集済み 編集者: よねKEN 編集日時 2003-08-24 16:59 ] | ||||||||
|
投稿日時: 2003-08-24 15:26
java.util.Properties は読み取り専用じゃないですよ... [ メッセージ編集済み 編集者: サ 編集日時 2003-08-24 15:27 ] | ||||||||
|
投稿日時: 2003-08-24 15:44
いや、ですから > 本当に読取専用(クラスのインタフェースレベルで読み取りしか出来ないクラス) > にするのなら と書いたんですが。 「クラスのインタフェースレベルで読み取りしか出来ない」と言ったのは、ようはコード上そういうメソッドなどの呼び出し自体が出来ない(コンパイル時レベルのインタフェース)と言う意味で言いました。 もちろん、コレクションの実装としては、よねKENさんの方法で問題はないわけですが。 | ||||||||
|
投稿日時: 2003-08-24 16:57
そういう意味でしたか失礼しました。 そういうことなら、IDictionaryインタフェースは実装しつつ、 読み取り専用の独自のインタフェース(例えば、IReadOnlyDictionaryとかいう名前で) を用意して、それも同様に実装すればいいのではないでしょうか? IDictionaryとしても扱えるし、読み取り専用のDictionaryとして扱いたい場合は、 IReadOnlyDictionaryで扱えばOKですよね。 #IDictionaryとして扱う場合にAddなどが呼べます。IDictionaryとして扱うときは、 #読み取り専用かどうかはIsReadOnlyプロパティで調べるか、あるいは、 #NotSupportExceptionをキャッチするかをしないといけませんが、 #これはIDictionaryインタフェース自体の仕様なので、また、別の話ですね。 |
1