C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ハッシュテーブルのような定数を作成し、共通で使用したい


(過去ログ 60 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■34379 / inTopicNo.1)  ハッシュテーブルのような定数を作成し、共通で使用したい
  
□投稿者/ 海原雄山 (1回)-(2009/03/27(Fri) 21:11:18)

分類:[VB.NET/VB2005 以降] 

共通で使用する定数を作りたいのですが、Public Constで使用する以外に、ハッシュテーブルのようなものを定数として使用したいと考えています。
例えば、以下のようなことをやりたいと思っています。
・分類記号として、例えば"1","2","3","4","A","B"を用意する。
・ユーザがコンボボックス等で選択した分類記号を処理するロジック(例えばSelect Caseで分岐して処理する)で、ソース上で何の値を
 使用しているか分かるように、変数・定数名に意味を持たせるようにしたい。
 (Enumのような感じ)
・分類記号をキーとして、それに対応する分類名を取得したい。
・値は変更できないようにしたい。

これらを満たすようなものを作るには、クラスを作成し、これをインスタンス化するしかないでしょうか?
わざわざインスタンスを作成せずに、静的に参照できるハッシュテーブルを作成する方法はあるでしょうか?
よろしくお願い申し上げます。
引用返信 編集キー/
■34404 / inTopicNo.2)  Re[1]: ハッシュテーブルのような定数を作成し、共通で使用したい
□投稿者/ よねKEN (300回)-(2009/03/28(Sat) 11:17:19)
No34379 (海原雄山 さん) に返信
> 共通で使用する定数を作りたいのですが、Public Constで使用する以外に、ハッシュテーブルのようなものを定数として使用したいと考えています。
> 例えば、以下のようなことをやりたいと思っています。
> ・分類記号として、例えば"1","2","3","4","A","B"を用意する。
> ・ユーザがコンボボックス等で選択した分類記号を処理するロジック(例えばSelect Caseで分岐して処理する)で、ソース上で何の値を
>  使用しているか分かるように、変数・定数名に意味を持たせるようにしたい。
>  (Enumのような感じ)
> ・分類記号をキーとして、それに対応する分類名を取得したい。
> ・値は変更できないようにしたい。

この機能を持った辞書系のクラスがたぶんありませんので、
各要素の値の追加/削除や変更を絶対にさせないようにするにはそういうクラスを作る必要があると思います。

「値を変更できないようにしたい」の条件以外なら以下のような感じで満たせるのですが。
(以下のようなコレクションの初期化子は確かC#3.0からだったと思うので、それ以前なら静的コンストラクタを使って初期化ですね)

// どこかのクラスで以下のような定義をする。
public static readonly Dictionary<string, Hoge> Dic =
   new Dictionary<string, Hoge>() { { "1", Hoge.A }, { "2", Hoge.B }, { "3", Hoge.C }, { "A", Hoge.X }, { "B", Hoge.Y } };

//どこかで適当にenumを定義
public enum Hoge
{
A,
B,
C,
X,
Y,
}

> これらを満たすようなものを作るには、クラスを作成し、これをインスタンス化するしかないでしょうか?

値の変更を許さないためには独自のクラスを作る必要があるのではないかと思いますが、
#調べが足りないだけで、.NET Frameworkのクラスライブラリ内に使えるクラスがあるかもしれません。

> わざわざインスタンスを作成せずに、静的に参照できるハッシュテーブルを作成する方法はあるでしょうか?

インスタンスを作成せずに、という条件を満たす方法はありません。

引用返信 編集キー/
■34414 / inTopicNo.3)  Re[2]: ハッシュテーブルのような定数を作成し、共通で使用したい
□投稿者/ nori (61回)-(2009/03/28(Sat) 19:06:23)
2009/03/28(Sat) 19:06:48 編集(投稿者)

自分は、Enum値の名称用CustomAttributを作って対応しています。
こうしておけば、Enum値に対応する名称の設定が直ぐ近くにできて見やすいです。

↓みたいな感じ。(C#)
public enum Hoge
{
[EunmName("A商品")]
A,
[EunmName("B商品")]
B,
}

ただ、値を変更できないようにしたいという条件を満たしているかどうかは分かりません。
(Attributの内容を実行中に変更できるかどうか知らないので)
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -