[解決済み] .NETにおけるstructとclassの違いは何ですか?
2022-03-19 14:34:14
質問
.NETの構造体とクラスの違いは何ですか?
どのように解決するのですか?
.NETでは、型は2つのカテゴリに分類されます。 参照型 と 値型 .
構造体は 値型 であり、クラスは 参照型 .
一般的な違いは 参照型 はヒープ上に存在し 値型 はインラインに、つまり変数やフィールドが定義されている場所に存在します。
を含む変数は 値型 には、全体の 値型 の値を指定します。構造体の場合は、構造体全体とそのすべてのフィールドが変数に含まれることを意味します。
を含む変数は 参照型 はポインタを含むか 参照 実際の値が存在するメモリ上のどこか他の場所への移動です。
これには、そもそも1つのメリットがあります。
- 値の種類 常に値を含む
- 参照型 を含むことができます。 ヌル -つまり、その時点では何も参照していないことを意味します。
内部的には 参照型 はポインタとして実装されており、そのことと、変数の割り当ての仕組みを知っていれば、他の動作パターンがあることがわかります。
- の内容をコピーして 値型 変数の内容を別の変数にコピーすると、その内容全体が新しい変数にコピーされ、2つの変数が区別できるようになります。言い換えれば、コピー後は一方を変更しても他方には影響しません。
- の内容をコピーして 参照型 変数を別の変数にコピーすると、参照もコピーされます。 どこか を保存しています。つまり、コピーした後、一方の参照のデータを変更すると、もう一方の参照にも影響を与えるように見えますが、実際には同じデータを2箇所で見ているだけなのです。
変数やフィールドを宣言するとき、この2つのタイプはどのように違うのでしょうか。
- 変数を指定します。 値の種類 はスタックに住んでいます。 参照型 は、実際のメモリが存在するヒープメモリのどこかへのポインタとしてスタック上に存在します(ただし Eric Lippertsの記事シリーズ。スタックは実装の詳細である .)
- class/struct-fieldになります。 値型 は完全に型の中に住んでいます。 参照型 は、実際のメモリが存在するヒープメモリのどこかへのポインタとして、型の内部に存在します。
関連
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] .NETでのdecimal, float, doubleの違い?
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] Pythonの旧スタイルのクラスと新スタイルのクラスの違いは何ですか?
-
[解決済み] .NET Coreと.NET Standard Class Libraryのプロジェクトタイプの違いは何ですか?
-
[解決済み] C++の'struct'と'typedef struct'の違い?
-
[解決済み] .NETで文字列から発音区分符号(アクセント)を削除するにはどうすればよいですか?
-
[解決済み] HashSetとListの性能比較
-
[解決済み] C++のstructとclassの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] app.configのマッピングがないアセンブリのapp.configの再マッピングを考慮する。
-
[解決済み] Marginのプロパティ順
-
[解決済み] csilogfileは何のためにあるのですか?
-
[解決済み] 1は有効なWin32アプリケーションではありません "を解決するには?
-
[解決済み] パッケージのダウングレード警告を検出(dotnet core, vs 2017)
-
[解決済み] .Any() vs .Count() > 0のどちらのメソッドがより良いパフォーマンスを発揮しますか?
-
[解決済み] C++のstructとclassの違いは何ですか?
-
[解決済み】クラスではなく、構造体を使用する必要があるのはどんな場合ですか?
-
[解決済み】.NETで構造体のデフォルトコンストラクタを定義できないのはなぜですか?
-
[解決済み] なぜ構造体は継承をサポートしないのですか?