- - PR -
キャストを作ることはできますか?
投稿者 | 投稿内容 | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-26 19:34
やめましょう... CLR の主役である "型" が非常にわかりにくくなります。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-01-26 20:11
確かにわかりにくくはあるのですが、例えば次のような場合に、どのように書くのがスマートなのか、目指すところが見えなくなっている部分があるのです。
値はオブジェクトで、通常は、値を書き換えるためのクエリーを書くためには、 CType(値, String) で済ませたいのですが、ComboItem の場合は、これができないのです。 どう書くのがスマートだと思いますか? | ||||||||||||||||||||
|
投稿日時: 2006-01-26 22:16
斜め読みなんで外してるかもしれませんが…
普通にキャストして,求める値の入ったプロパティで アクセスするのが一番スマートだと思います。 何より読んでてわかりやすい。 | ||||||||||||||||||||
|
投稿日時: 2006-01-26 22:57
こんにちは
ComboItemの派生クラスを作って、デフォルトプロパティを準備すれば 値 だけで済むような気がします。 | ||||||||||||||||||||
|
投稿日時: 2006-01-26 23:08
> 、私のクラスを他の型にキャストさせる処理を自分の手で書きたかったのです。
TypeConverter or IConvertible って、書いているんだけどなぁ。。。 > どのように書くのがスマートなのか、 やめましょう、そんな考え方。スマートさより、堅牢さ、保守性に重きを置くべきです。 たとえば、むか〜〜し、VB よりも前の BASIC のころ、こんな書き方をしていました。 p = p + (STICK & 1 == 1) * 32 - (STICK & 2 == 2) - (STICK & 4 == 4) * 32 + (STICK & 8 == 8) STICK は、カーソルキーが押されているかを表し、上右下左の順に、1,2,4,8とします。画面座標を左上からの直線で考え、横が32あるとして、カーソルキーが押された状態によって座標を移動させています。1行だし、演算だけなので処理速度も上がります。X,Y 2つの変数を持ち、IF 文で条件分岐させていた私は、動きをトレースして、「なるほど〜」とうなりました。 でも、「真」が−1であることに依存した、とても危ないプログラムです。画面を仮想的にスクロールさせることも出来ません(直すところが多くなる)。見た目やスピードと引き替えに、堅牢さと保守性を犠牲にしています。 > 1行に縮められる魔法の言葉だと思っているのですが 保守性を下げる、魔法の言葉です :P たとえば、「番号」に負の数が入ってくることは、想定していませんよね?でも、誰かが入れるかもしれない。Int32 の範囲を超えるような値をセットしようとするかもしれない。名前にも、常識的な長さの最大値があると思います。それを越えた設定が出来てしまいます。 データを入力するのは、フォームからの手入力だけとは限りません。初期データを入れるときや、移行データを作るとき、ちょっとしたミスをすることは十分考えられます。そういうとき、このままでは、不正な値も入力できてしまいます。 それを防ぐために、フィールドを private にして隠し、プロパティというメソッド経由でアクセスさせます。値の範囲チェックをするのはアクセスメソッドの中にまとめることが出来、チェックのためのコードをプログラム中にばらまかなくてすみます。 ちなみに、チェックは必ずしてください。それがセキュアプログラミングの一歩です。つまりこれも、スマートさより、堅牢性、保守性を優先する、ということです。 で、私が「ちゃうやん」といったのは、「プロパティちゃうやん、フィールドやん」です。コメントの間違いはバグと同じです。 〆 witten by Jitta on 2006/01/26 [ メッセージ編集済み 編集者: Jitta 編集日時 2006-01-26 23:08 ] | ||||||||||||||||||||
|
投稿日時: 2006-01-27 07:25
パラメータのない、デフォルト プロパティは使えません。 いわゆるインデクサのことを仰っているのであれば、添え字が必要ですよね。 # ところで、15 が華麗にスルーされてますが、何かまずかったですかね? (^-^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||
|
投稿日時: 2006-01-27 09:50
じゃんぬねっとさんの書き込み (2006-01-27 07:25) より:
# ところで、15 が華麗にスルーされてますが、何かまずかったですかね? (^-^ [/quote] 華麗にスルーしたつもりは無かったんです。 いつもながら、読んでいて「なるほど〜」と深く納得して、その後、何やら、いろいろなことで混乱していて、この件について返答するのが遅くなってしまったのです。 すみませんでした。
という事は、特に番号の値チェックなどの副作用的なものが不要であっても、
ではなくて、
と書くべきだということですね? 了解しました。今後、そう書くことにします。 #というか、今まで書いたのも全部なおしちゃった。
これは分かっていてわざと「プロパティ」と表現しました。 この頃の僕は、Public 番号 as string な書き方がアリだったので、分かっていてあえてプロパティ的な使い方をする際に、#Region で閉じた時に、プロパティとしての使われ方をするためでした。 でも、今の僕は、Public 番号 as string と書かないので、上記の書き方ももうしません。 いろいろとありがとうございました。 | ||||||||||||||||||||
|
投稿日時: 2006-01-27 10:20
Jitta さんのと合わせて引用するならば、こっちの方が適切かも。
「たとえば」のところに、値チェックのこと書いた方が判りやすかったなぁ、と後悔です。
誤解を招かれそうなので補足しますが、 今回のような公開されたメンバの場合はです。 いつもそうであるべきと言う意味ではないです。 静的な読み取り専用のフィールドや、静的な定数フィールドであれば普通に使います。 私個人の意見としては「概念上」の問題が最もウェイトを占めています.. _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |