- ベストアンサー
デリゲートとジェネリクスとかの使いどころについて
インターフェイスとデリゲートとジェネリクスとコレクションの使いどころについて質問です。 これら4つの使いどころが、いつ使うのかわかりません。 どういったときに使うのか教えてくださいmm
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> フォームにあるオブジェクトはすべてコレクションに入ると書いていました。 FormのControlsプロパティがそれですね。 > なら、オブジェクトの値はすべてコレクションから取り出すべきだと思いますが間違っていますか? コントロールから値を取り出すのはコントロールによって異なります。コレクションにはボタンやラベルなども含まれるので、これらを除外しながらひとつずつコントロールに適した取り出し方をしなければなりません。 コントロールの数にもよりますが、普通は直接取り出したほうが楽です。 (これもまた状況によってですが) > すべてプロパティ経由で値を格納して、取り出すのはコレクションから取り出したらいいと思いました。 扱うデータ型が一種類だけならそれでもよいでしょう。ですが、データ型は数値系だけでもたくさんあり、.NETや独自のクラスも含めると数え切れないほどの型があります。それらをコレクションにまとめたところで、得られるのはGetTypeとToStringくらいです。それぞれのデータを正しく得るにはその都度CTypeしなければなりません。 異なるクラスを収められるコレクションは便利ですが、それはクラスやデータの「共通性」を利用するということ。個々の特徴・特性を廃し、ひとつのコードで効率を上げるという話です。 どこまでをコレクションにまとめて効率を上げるか、というのもプログラムによって判断すべき点ですので「オブジェクトの値はすべてコレクションから取り出すべき」と考えを固定化せず、柔軟に考えられるようにしたほうが良いですね。
その他の回答 (1)
- うぃず(@Wizard_Zero)
- ベストアンサー率69% (344/495)
> どういったときに使うのか この問いに関する答えを出すのは非常に難しいですね。それこそ千差万別。時と場合によってさまざまです。 私の経験則から言うと、 インターフェイス・ジェネリックなどは、処理の共通化・共有化・汎用性・多様性などを判断材料にします。 デリゲートは、拡張性・柔軟性などが判断材料でしょうか。 コレクションは、主にデータ管理の利便性ですね。 あるプログラムを組むとき、個々の場面でどの機能を使うのがよいか、という判断に一定の決まりはありません。 プログラマーの個性や個人差すらも関わってきます。 「どこで何を使うか」という判断を身につけるには機能・役割を理解するだけでなく実践的経験が必要です。 ここで用例を挙げることは可能ですが、用例とは常に、説明するのに都合の良いように組み立てられているものなので、実践的経験としては役に立たないでしょう。 使い方を教えるのは簡単です。 でも、考え方を教えるのは、とても難しいですね。 ひとつのヒントとして・・・ プログラムを組んでいるときに「同じようなコードを書いているな」「似ているけど微妙に違う処理だ」などと感じたら、その時に「もっと効率の良い方法はないかな?」と考えてみてください。その解決策を探る中で、今蓄えている知識が役に立つと思います。
お礼
ありがとうございます。 フォームにボタンなど配置して、GUIを作って、機能を書いて、それから最適化を考えたいと思います。 初めからむずかしく考えずに作って、最適化のときに色々考えたいと思います。 値の格納方法について1つ聞きたいです。 フォームにあるオブジェクトはすべてコレクションに入ると書いていました。 なら、オブジェクトの値はすべてコレクションから取り出すべきだと思いますが間違っていますか? フィールドにメンバを格納する。フィールドをまとめるプロパティに格納する。すべてのメンバを束ねるコレクション。 オブジェクトは、構造型・列挙型を除いて、すべてプロパティ経由で値を格納して、取り出すのはコレクションから取り出したらいいと思いました。
お礼
ありがとうございます。 コントロールズ=コレクション??? ControlsプロパティはFormを作成時に自動的に生成され、フォームで使われるオブジェクトがすべて格納されているわけですよね? この認識は合っていますか? >コントロールから値を取り出すのはコントロールによって異なります。 「コレクション」から値を取り出すのはコントロールによって異なるという解釈と同義になりますか? 異なるクラスのメンバをすべて扱えるコレクションは便利そうに見えましたが、共通性がある変数を持たせるといいことがわかりました。 プロシージャの一番上で宣言するpublicメンバだけコレクションにすると良さそうです。 あとは最適化のときに検討したいと思います。 毎度毎度ありがとうございますmm 大変為になります!