- PR -

CONSTに関して

投稿者投稿内容
NothingButXMLInfoSet
ベテラン
会議室デビュー日: 2003/03/31
投稿数: 65
投稿日時: 2003-04-04 18:04
最初に。基本的に一郎さんのおっしゃるとおり、列挙体を使うべきだと私も思っています。で、ちょっとツッコミを。

引用:

一郎さんの書き込み (2003-04-04 14:59) より:
このようにすれば、受け渡しされているのは方角です。渡される型には「方角」という意味が与えられています。
Direction.Northは0ではなく、あくまで北なのです。
...
オブジェクト指向なのですから、それぞれのオブジェクトの意味ということについて考え、迷わず列挙型を使いましょう。


これを意味を示すものと強調するのは危険な気がします。というのも、バージョン2においてDirectionが次のように拡張された場合、

[code]
enum Direction{
NorthWest,
NorthEast,
SouthWest,
SouthEast,
 North,
 South,
 East,
 West,
}
[code]
Direction.Northの値が変わってしまい、これまでのコードは動作しなくなります。Direction.Northが本当に「北」という意味を表していれば、こんなことは起こらないはずです。実際、CLRではメソッド定義の順序をソースコード内部で変更しても、呼び出されるメソッドが変わったりはしません。これはvテーブルのオフセットなどではなく、「Console.WriteLine」の意味を実現しているからです。ですが、列挙体ではこのような意味での意味を表しているわけではないので、コンパイルすると値が変わってしまうことがありえます。

だからといって列挙体の利用に反対しているわけではありません。定数より列挙体というご意見に私も賛成です。
すなめり
常連さん
会議室デビュー日: 2003/01/29
投稿数: 37
お住まい・勤務地: 横浜
投稿日時: 2003-04-04 18:44
Jittaさんの案で実現すると、こんな感じでしょうか。

Public Enum AdminID
super
east
west
End Enum

EastWest = Request.QueryString.Item("EastWest")
// EastWestの値は"east"、"west"、"super"とする。
If EastWest = Enum.GetName(AdminID,AdminID.east) Then
// "east"だった場合の処理
End If

と、まあ、一応可能だとは思うのですが、
NothingButXMLInfoSetさんのやりかたの方が
私としては好みです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-04-07 10:11
こんにちは。
引用:

すなめりさんの書き込み (2003-04-04 18:44) より:
Jittaさんの案で実現すると、こんな感じでしょうか。


私の案ではありません。「デジタルアドバンテージ」と、著作権表示してあります。私はただ、このスレッドを見る前にTipsを見ていて、「あ、こんなこともできるのか」と思ったことが、ちょうど当てはまると思ったので紹介しただけです。

#ここでは問題にならないでしょうが、会社の製品なんかでだと
#大きな問題になることがあるので、ご注意を
すなめり
常連さん
会議室デビュー日: 2003/01/29
投稿数: 37
お住まい・勤務地: 横浜
投稿日時: 2003-04-07 11:08
Jittaさんの書き込み(2003-04-07 10:11)より
引用:

私の案ではありません。「デジタルアドバンテージ」と、著作権表示してあります。私はただ、このスレッドを見る前にTipsを見ていて、「あ、こんなこともできるのか」と思ったことが、ちょうど当てはまると思ったので紹介しただけです。



なるほど。私としては「Enum定数の名称を文字列比較の対象とする」という提案に関して「Jittaさんの案」としたつもりだったのですが、著作権に触れる恐れはあるかもしれませんね。気を付けるようにします。

スキルアップ/キャリアアップ(JOB@IT)