3

これは恥ずかしいです。私はずっと前にC#を学びましたが、クラスに関するこの質問を理解しようとしています(もちろん、クラスは参照型であるため)。

質問は次のとおりです。一方のインスタンスと呼ばれ、もうPerson一方のインスタンスに名前が付けられたクラスの2つの新しいインスタンスを作成し(なぜそれを呼び出すのかを気にする人)、に設定してからに設定すると、は?に設定されます。それとも私はこれを正しく理解していませんか?PQQP.Name"James"Q.Name"Suzie"P.Name"Suzie"

みんな、ありがとう

これを手伝ってくれてありがとう。私に説明されたのはその通りだと思いました。しかし、私が読んだチュートリアルの説明は明確ではなく、自分でテストするために数か月間コンピューターを持っていませんでした。

追伸私は私に明らかな最初の正しい答えを選びました。しかし、いくつか気づきました。皆様のご協力に改めて感謝いたします。

4

5 に答える 5

5

Q.Name を変更しても P.Name には影響しません。のように

 var p = new Person();
 var q = new Person();
 p.Name = "James";
 q.Name = "Suzie";

ただし、q が p インスタンスを指している場合、q を変更すると p も変更されます。次のように:

 var p = new Person();
 var q = p;
 p.Name = "James";
 q.Name = "Suzie";

q と q の両方の名前が "Suzie" になりました。

データ初期化子を使用すると、最初の例を次のように記述できます。

var p = new Person { Name = "James" };
var q = new Person { Name = "Suzie" };

はるかに読みやすいと思います。

于 2013-01-30T04:12:36.467 に答える
3

例:

// p and q are separate in the below example..

Person p = new Person();
Person q = new Person();

p.Name = "James";
q.Name = "Suzie";

Console.WriteLine(p.Name); // "James"
Console.WriteLine(q.Name); // "Suzie"

// both p and q refer to the same object, so both are "Suzie" in the below example
Person p = new Person();
Person q = p;

p.Name = "James";
q.Name = "Suzie";

Console.WriteLine(p.Name); // "Suzie"
Console.WriteLine(q.Name); // "Suzie"
于 2013-01-30T04:14:27.870 に答える
3

どちらもクラスPersonのP と Qの異なるインスタンスであるため、これは違います。オブジェクトまたはインスタンスの両方が異なるメモリ位置に定義されています。このチュートリアルを参照してください

于 2013-01-30T04:20:36.207 に答える
2

2 つのインスタンスを作成する場合は? いいえ、それらは 2 つの別個のオブジェクトになります。

Person person1 = new Person();
person1.Name = "James";
Person person2 = new Person();
person2.Name = "Suzie";
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);

これらは 2 つの異なるオブジェクトであるため、出力されてJamesからが出力されます。Suzieただし、これを行った場合:

Person person1 = new Person();
person1.Name = "James";
Person person2 = person1;
person2.Name = "Suzie";
Console.WriteLine(person1.Name);
Console.WriteLine(person2.Name);

それは印刷されSuzieSuzie. これは、person1person2の両方が同じオブジェクトを参照しているためです。

于 2013-01-30T04:15:04.573 に答える
1

同じクラスの 2 つのインスタンスを作成したため、これによって P.Name が Suzie に変更されることはありません。これは、これら 2 つのインスタンスに対してヒープ上に 2 つの異なるメモリ ロケーションを割り当てたことを意味します。

于 2013-01-30T04:15:03.260 に答える