- - PR -
キャストを作ることはできますか?
投稿者 | 投稿内容 | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-24 20:27
DataGridViewComboBoxColumn には
DisplayMember と ValueMember ってないのかな | ||||||||||||||||||||||||
|
投稿日時: 2006-01-24 22:08
TypeConverter or IConvertible
しかし、なんか、違和感。 さくら組もすみれ組も、「私のクラス」Class の参照変数ですよね。型変換は行われていませんが?単に
と、同じですよね? それとも、インスタンスを複製したい、ということなのでしょうか?→ ICloneable または、
というコンストラクタを追加するとか。 それとも、XML シリアライズする、とか。実用性の面では、これがお勧め。
プロパティちゃいまんがな(^-^; 〆 written by Jitta on 2006/01/24 | ||||||||||||||||||||||||
|
投稿日時: 2006-01-25 00:03
独り言にさせません。(^-^;) 敢えてフォローするならば、C# はメタデータ属性に近い記述で、 VB はヒトに近い記述... なんでしょうね。 でも、C# の sealed は final じゃないのが惜しいかな。(^^;) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||||||||||
|
投稿日時: 2006-01-25 10:52
ちょっと調べてみたので、見てみてください。 http://hongliang.seesaa.net/article/12239715.html
メソッドじゃなくてクラスに付けるキーワードだからこれはアリかなー、とか。 //C#に甘い人です。 [ メッセージ編集済み 編集者: Hongliang 編集日時 2006-01-25 10:54 ] | ||||||||||||||||||||||||
|
投稿日時: 2006-01-25 20:48
済みません、2006-01-24 19:23 を、軽く流していました。
そういうことは最初に書きましょう。焦点がずれていますよね。 Hongliangさんが詳細にレポートしてくださっています。デバッグの仕方、例外情報を解析するときの考え方を学ぶためにも必読です。 でもね、データバインディングを使えば、そうそう悩まずに済むと思います。というか、使わないと損です。コードを書く必要はほとんどありません。 川俣さんの記事→第12回 ドラッグ&ドロップ一発でDB連携アプリを完全構築! えムナウさんの記事→新グリッド・コントロールの豊富な機能と高い表現力 これら記事では対象がデータベースになっていますが、データソースの選択で「オブジェクト」を選択すればいいです。 えムナウさんの記事で、2ページ目の画面キャプチャを見てください。「顧客」をフォームにドロップすると、DataGridView になります。その中で、「性別」は ComboBox になります。 〆 written by Jitta on 2006/01/25 | ||||||||||||||||||||||||
|
投稿日時: 2006-01-26 18:54
あります。とても便利そうなので、使い方を調べてみたのですが、これってデータバインディング用のプロパティみたいなんです。
クラス替えが目的というよりは、私のクラスを他の型にキャストさせる処理を自分の手で書きたかったのです。
これは以前から気になっていたので確認しておきたかったのです。 僕にとって、 #region " 番号 プロパティ " public 番号 as integer #end region は、 #region " 番号 プロパティ " private _番号 as integer public property 番号() as integer get return(_番号) end get set(byval value As integer) _番号 = value end set end property #end region を1行に縮められる魔法の言葉だと思っているのですが、この考え方はどこか間違えているのでしょうか。
いえいえ、あやまられる程のことではありませんよ。
済みません。僕としては、結構いい線行っていると思っていたのですが。 でも、キャストをカスタマイズする方法も知りたかったので、これはこれで解決できてよかったです。
ありがとうございます。確かに便利ですよね。 実は、この記事は読んだのですが、僕は以前からデータバインディングがあまり好きになれないんです。 ちなみに、データバインディングを使う場合、性別もテーブルに持つことになるんでしょうか。 | ||||||||||||||||||||||||
|
投稿日時: 2006-01-26 18:54
ちょっとどころか、全て解決してありますね。 これをちょっとと言うのは、ある意味凄いことです。 僕が途中で躓いた先まで全て調べて解決して下さっていますね。 しかも丁寧な解説までついています。 とても感謝しております。本当にありがとうございました。 おかげ様で、問題は解決したのですが、実は、ここで取得した値を使う部分で更に躓いています。 諸々、処理を書いていると、Object 型を通して他のメソッドに渡すなどの処理が多数にあることに気づきました。 ComboItem は、ComboItem 型であるけれど、id の型の integer ように振舞えれば、とても素敵です。 dim 性別 as integer = CType(view.CurrentCell.Value, ComboItem).id 本来、上記のように書くのを dim 性別 as integer = CType(view.CurrentCell.Value, Integer) このように書いてもOKとすることは、可能なものでしょうか。 | ||||||||||||||||||||||||
|
投稿日時: 2006-01-26 19:32
考え方として正しいかどうかで言えば、そのクラスでの役割次第でしょう。 今回の例はインスタンス メンバなので「間違っている」に意見が傾きそうです。 概念上の話から実装レベルの話まで混ぜて話します。 私ではうまく説明できないかもしれません... (毎度のことですがw) さて、そのクラスで "公開されている" インスタンスなメンバである以上は、 やはりプロパティとして "明示化" すべきだと思います。 .NET Framework のクラス ライブラリを見てください。 フィールド メンバは、インスタンス メンバではなく、static なメンバである場合が殆どです。 それも readonly なメンバ、constant なメンバばかりじゃないでしょうか? これらのメンバはインスタンスとしての財産という概念を持ち合わせていないからです。 プロパティを実装することで、間に副作用を挟む余地が生まれるというのも利点でしょう。 たとえば、バインディング、コントロールで言えば視覚変化などですね。 ただし、private なメンバは別です。 これらは外部に関与しないため、"将来的にも" 副作用を期待しないのであればフィールドでも良いでしょう。 (それでも、プロパティにしてしまいますが) それと、プロパティによる実装をすると JIT コンパイルで最適化されることがあるようです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 |