質問

私の質問は次のとおりです。

  • 値タイプと参照タイプはいつ使用する必要がありますか?
  • 他の人よりも長所と短所は何ですか?
  • どこでも参照タイプを使用している場合はどうなりますか?それに害はありますか?

それぞれの利点と短所についても説明してください。私もそれを理解したいです。

役に立ちましたか?

解決

これには多くの混乱があるように思われ、ジョン・スキートは彼の著書「C#in Depth、第2版」でそれをクリアするのに良い仕事をしています。 (セクション2.3)。

私の個人的なアプローチは、正しい場合とそうでない場合がありますが、構造/列挙(値タイプ)のみを使用して、ある種の論理的または数学的操作で頻繁に使用することを知っている軽量の原子データ構造を表すことです。 Point, 、など

そうすれば、ガベージコレクションのパフォーマンスペナルティを避けることができると思います。しかし、ジョンは彼の著書のセクションで、特にランタイムの新しいバージョンでは、何かがスタックに載るかどうかにかかわらず、本当の保証はないと指摘しています。

ですから、私の最善の答えは、構造体のようなものを控えめに使用し、あなたがそうするならあなたがそれらを使用する理由を非常に意識することです。時期尚早の最適化に注意してください。そして、あなたがコピーを手に入れることができるなら、ジョンの本でそのセクションを読んでください。彼はこのトピック全体を明確にするのに良い仕事をしているからです。

関連している: structをいつ使用するのですか?

他のヒント

小型に値タイプを使用する必要があります、 不変 値を表すタイプ。
可変構造体を作らないでください.

他のすべてについては、参照タイプを使用します。

独自のアイデンティティを持っていない不変の値に値タイプを使用します(1は1です)、他のものには参照タイプを使用します。

http://www.albahari.com/valuevsreftypes.aspx

これがこの点に関する私の参照です。私は主に参照タイプTBHを使用します。 IEクラスおよび構造体ではありません。よく言われる主なポイントは、構造体は小さな情報にのみ使用されるべきであるということです。本当に正確な状況に依存します。オブジェクトブラウザ内の.NETフレームワークをご覧ください。これは、Microsoftの人たちが行ったことを確認し、特定のクラスと構造体を作成した理由を分析できます。

不変の価値タイプと不変の参照タイプは、意味的にはすべて同じです。唯一の違いは、参照タイプが意味がある場合とそうでない場合がある場合とそうでない場合がある参照平等チェックをサポートし、その値タイプは(tの)nulable(t of)に包まれている可能性があることです。タイプが不変になる場合、それがどのように使用されるかによって、構造体またはクラスを支持するパフォーマンスの理由があるかもしれません。構造体は、一部の操作(ほぼすべての操作、4バイト未満のサイズ)でより速くなりますが、クラスは他の一部(特に16バイトを超えるもの)でより速く速くなる可能性があります。さらに、いくつかのタイプの操作は、構造体では本質的に不可能です。

一部の否定者が主張するものに反して、可変構造体タイプは有用ですが、いくつかの注意事項があります。可変クラスオブジェクトへの参照を保持する変数があり、そのオブジェクトを変更するために何かを行う場合、その変更はそのオブジェクトへの参照を保持するすべてのものによって効果的に「見られます」。他のものを邪魔することなくオブジェクトを変更したい場合は、そのオブジェクトへの唯一の参照を保持していることを知っている必要があります。多くの場合、これを確実にする唯一の方法は、オブジェクトからすべてのデータを新しいオブジェクトインスタンスにコピーし、その新しいインスタンスに変更を加えることです。対照的に、可変構造体がある場合、新しいインスタンスを作成することなく、必要な変更を単純に作成できます。

可変構造体の唯一の実際の問題は、.NETがさまざまな抽象化を使用して統一型システムの一部として動作させることであり、これらの抽象化により、オリジナルが論理的に使用されるべき場所で構造のコピーが使用される可能性があります。これらの置換がいつ発生するかは必ずしも明白ではなく、混乱した誤った行動につながる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top