C#の参照型
2023-08-14 23:15:32
質問
このコードを考えてみましょう。
public class Program
{
private static void Main(string[] args)
{
var person1 = new Person { Name = "Test" };
Console.WriteLine(person1.Name);
Person person2 = person1;
person2.Name = "Shahrooz";
Console.WriteLine(person1.Name); //Output: Shahrooz
person2 = null;
Console.WriteLine(person1.Name); //Output: Shahrooz
}
}
public class Person
{
public string Name { get; set; }
}
当然ながら
person1
に
person2
とし
Name
のプロパティは
person2
が変更されると
Name
の
person1
も変更されます。
person1
と
person2
は同じ参照を持っています。
なぜ
person2 = null
は、その
person1
変数も null にならないのでしょうか?
どのように解決するのですか?
どちらも
person
と
person2
は
を参照してください。
であり、同じオブジェクトへの参照です。しかし、これらは異なる参照です。そのため
person2 = null;
を変更するのは参照のみです。
person2
を残し、参照
person
と対応するオブジェクトは変更されません。
これを説明するには、簡略化した図解が一番だと思います。以下は、この状況がどのようなものであったかを示しています。
以前
person2 = null
:
<イグ
そして、これがその写真です。 後 の後、ヌル代入をしたところです。
ご覧のように、2枚目の写真では
person2
は何も参照しない(あるいは
null
への参照は何も参照しないので、厳密に言えば
null
への参照は異なる条件であるため、厳密には
ルーンFS
を参照)、一方
person
はまだ既存のオブジェクトを参照しています。
関連
-
解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C# [解決済み] Critical error detected c0000374 - C++ dll returns pointer off allocated memory to C#.
-
[解決済み】バックスラッシュを含むパス文字列のエスケープシーケンスが認識されない件
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】Visual Studio: 操作を完了できませんでした。パラメータが正しくありません
-
[解決済み】Linq 構文 - 複数列の選択
-
VSでscanfエラーを恒久的に解決するには、ソースファイルを作成し、自動的に#define _CRT_SECURE_NO_WARNINGS 1を追加してください。
-
[解決済み] DateTime型の誕生日から年齢を計算するにはどうしたらいいですか?
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] 戻り値のないFuncデリゲート
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】エラー。「戻り値を変更できません」 C#
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】C#のequal to演算子でtextとvarcharのデータ型は互換性がない
-
[解決済み】エラー「必要なフォーマルパラメータに対応する引数が与えられていない」を解決する?
-
[解決済み】URLから画像をダウンロードする方法
-
[解決済み】ユーザー設定値を別のユーザー設定値で設定する
-
[解決済み】名前 'ViewBag' が現在のコンテキストに存在しない - Visual Studio 2015
-
[解決済み] なぜNullPointerExceptionが発生しないのですか?