ホームページ バックエンド開発 C#.Net チュートリアル C# の値型と参照型の違いを比較する

C# の値型と参照型の違いを比較する

Sep 06, 2017 am 11:13 AM
.net 違い

CLR は値型と参照型の 2 つの型をサポートしています FCL の型のほとんどは参照型のようですが、最も一般的に使用される型は値型です。参照型は常にマネージド ヒープから割り当てられ、new 演算子を使用してオブジェクトがインスタンス化されると、返されたオブジェクト メモリ アドレスは変数に格納されます。参照型を使用するときに理解すべき心理的要因は次の 4 つです:

1. メモリはマネージド ヒープから割り当てられる必要があります

2. ヒープ上に割り当てられた各オブジェクトには、使用前に初期化する必要がある追加のメンバーがいくつかあります。

3. オブジェクト内の他のバイトは常にゼロに設定されます。

4. マネージドヒープからオブジェクトを割り当てる際、ガベージコレクションが強制される場合があります。

参照型を悪用すると、必然的にオーバーロードが発生することがわかります。値の型をもう一度見てみると、これは通常、スレッド スタック上に割り当てられ、それを運ぶ変数にはインスタンスへのポインタが含まれていません。ガベージ コレクターによって制御されないため、型を使用すると、マネージド ヒープへの負荷が軽減され、アプリケーションの存続期間中のガベージ コレクションの数が減ります。

C#で「クラス」と呼ばれるものは参照型であり、値型は構造体または列挙型です。すべての構造は、抽象型 System.ValueType から直接派生します。そして、それ自体は Object から直接派生し、すべての列挙型は System.Enum 抽象型から派生し、Enum は ValueType から派生し、それらはすべて相互にリンクされています。

独自の型を設計するとき、いつそれを値型として定義しますか?

1. この型はプリミティブ型(コンパイラによって直接サポートされるデータ型(Int32、Int64など))の動作をします

2. この型は他の型を継承する必要がありません。

3. この型は他の型を派生させません。

4. 値型は実パラメータや戻り値として使用する際に対応するフィールドをコピーする必要があるため、インスタンスが大きすぎると一定のパフォーマンス低下が発生します。

そのため、型インスタンスは小さく(16バイト以内)、インスタンスは大きくする必要がありますが、メソッドの実引数として渡してメソッドから返す必要はありません。

値型と参照型の違いについては、いくつかの点があります:

1. 参照型はボックス化された形式であり、値型は非ボックス化された形式です。この 2 つは、特定の方法で相互に変換することもできます。 (具体的な手順については次回のブログで詳しくお話します)

2. 値型は新しい仮想メソッドを導入しないでください。すべてのメソッドは抽象化できず、上書きを防ぐために暗黙的にシールされます。

3. 値型変数を別の値型変数に代入すると、フィールドごとのコピーが実行されます。参照型の変数を別の参照型に代入すると、メモリ アドレスのみがコピーされます。 2 つ以上の参照型変数がヒープ上の同じオブジェクトを参照することができ、1 つの変数に対して実行される操作が別の変数によって参照されるオブジェクトに影響を与える可能性があります。対照的に、値型変数は独立しており、互いに影響しません。

4. ボックス化されていない値型はヒープ上に割り当てられないため、この型のインスタンスがアクティブでなくなると、それらに割り当てられたストレージは解放され、ガベージ コレクションを待たなくなります

以上がC# の値型と参照型の違いを比較するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

マルチスレッドと非同期C#の違い マルチスレッドと非同期C#の違い Apr 03, 2025 pm 02:57 PM

マルチスレッドと非同期の違いは、マルチスレッドが複数のスレッドを同時に実行し、現在のスレッドをブロックせずに非同期に操作を実行することです。マルチスレッドは計算集約型タスクに使用されますが、非同期はユーザーインタラクションに使用されます。マルチスレッドの利点は、コンピューティングのパフォーマンスを改善することですが、非同期の利点はUIスレッドをブロックしないことです。マルチスレッドまたは非同期を選択することは、タスクの性質に依存します。計算集約型タスクマルチスレッド、外部リソースと相互作用し、UIの応答性を非同期に使用する必要があるタスクを使用します。

C言語のcharとwchar_tの違い C言語のcharとwchar_tの違い Apr 03, 2025 pm 03:09 PM

C言語では、charとwchar_tの主な違いは文字エンコードです。CharはASCIIを使用するか、ASCIIを拡張し、WCHAR_TはUnicodeを使用します。 Charは1〜2バイトを占め、WCHAR_Tは2〜4バイトを占有します。 charは英語のテキストに適しており、wchar_tは多言語テキストに適しています。 CHARは広くサポートされており、WCHAR_TはコンパイラとオペレーティングシステムがUnicodeをサポートするかどうかに依存します。 CHARの文字範囲は限られており、WCHAR_Tの文字範囲が大きく、特別な機能が算術演算に使用されます。

C言語合計の機能は何ですか? C言語合計の機能は何ですか? Apr 03, 2025 pm 02:21 PM

C言語に組み込みの合計機能はないため、自分で書く必要があります。合計は、配列を通過して要素を蓄積することで達成できます。ループバージョン:合計は、ループとアレイの長さを使用して計算されます。ポインターバージョン:ポインターを使用してアレイ要素を指し示し、効率的な合計が自己概要ポインターを通じて達成されます。アレイバージョンを動的に割り当てます:[アレイ]を動的に割り当ててメモリを自分で管理し、メモリの漏れを防ぐために割り当てられたメモリが解放されます。

C言語関数の基本的な要件は何ですか C言語関数の基本的な要件は何ですか Apr 03, 2025 pm 10:06 PM

C言語関数は、コードモジュール化とプログラム構築の基礎です。それらは、宣言(関数ヘッダー)と定義(関数体)で構成されています。 C言語は値を使用してパラメーターをデフォルトで渡しますが、外部変数はアドレスパスを使用して変更することもできます。関数は返品値を持つか、または持たない場合があり、返品値のタイプは宣言と一致する必要があります。機能の命名は、ラクダを使用するか、命名法を強調して、明確で理解しやすい必要があります。単一の責任の原則に従い、機能をシンプルに保ち、メンテナビリティと読みやすさを向上させます。

CとC#の違いと接続は何ですか? CとC#の違いと接続は何ですか? Apr 03, 2025 pm 10:36 PM

CとC#には類似点がありますが、それらは完全に異なります。Cはプロセス指向の手動メモリ管理、およびシステムプログラミングに使用されるプラットフォーム依存言語です。 C#は、デスクトップ、Webアプリケーション、ゲーム開発に使用されるオブジェクト指向のガベージコレクション、およびプラットフォーム非依存言語です。

XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? XPathを使用して、JavaScriptの指定されたDOMノードから検索する方法は? Apr 04, 2025 pm 11:15 PM

JavaScriptのDOMノードの下でのXpath検索方法の詳細な説明、XPath式に基づいてDOMツリーから特定のノードを見つける必要があることがよくあります。あなたがする必要があるなら...

cマルチスレッドの3つの実装方法の違いは何ですか cマルチスレッドの3つの実装方法の違いは何ですか Apr 03, 2025 pm 03:03 PM

マルチスレッドは、コンピュータープログラミングの重要なテクノロジーであり、プログラムの実行効率を改善するために使用されます。 C言語では、スレッドライブラリ、POSIXスレッド、Windows APIなど、マルチスレッドを実装する多くの方法があります。

Charとunsigned Charの違いは何ですか Charとunsigned Charの違いは何ですか Apr 03, 2025 pm 03:36 PM

CharおよびUnsigned Charは、文字データを保存する2つのデータ型です。主な違いは、負と正の数に対処する方法です:値範囲:char署名(-128〜127)、および符号なしのchar unsigned(0〜255)。負の数処理:charは負の数を保存でき、符号なしのcharはできません。ビットモード:char最高ビットは、シンボル、符号なしのchar unsignedビットを表します。算術操作:charおよびunsigned charが署名されており、署名されていないタイプがあり、それらの算術操作は異なります。互換性:charおよびunsigned char

See all articles