0

私は以下の問題を理解しようとしています。B == A理由を知りたいのですC == Bが、次のプログラムでは誤りです。

using System;

namespace Mk
{
    public class Class1
    {
        public int i = 10;
    }
    class Program
    {
        static void Main(string[] args)
        {
            Class1 A = new Class1();
            Class1 B = new Class1();
            Class1 C = A;

            Console.WriteLine(B == A);
            Console.WriteLine(C == B);
        }
    }
}

出力:

False
False

4

5 に答える 5

2

AとBは異なるオブジェクトです。それらは同じクラスですが、同じインスタンスではありません。二人が両方とも人になることができるのと同じように、彼らは同じ人ではありません。

于 2012-12-22T17:13:49.117 に答える
1

2つのクラスインスタンスの参照を比較しています。AとBは異なるメモリ位置にあるため、それらの参照は等しくありません。クラスの同等性をテストする場合は、Equals()メソッドをオーバーライドする必要があります。 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx

あなたの例では、テストする場合、両方がメモリ内の同じ場所を指しているので、A == Cそれが返されるのがわかります。true

于 2012-12-22T17:15:00.627 に答える
1

.NETでは、クラスは参照型です。参照型には2つのものがあります。オブジェクトとオブジェクトへの参照

あなたの場合、Aはへの参照でありObjectABはへの参照ObjectBです。

定義するときClass1 C = A;

  • まず、2つのものを作成します。ObjectCと呼ばれるオブジェクトとCと呼ばれるオブジェクトへの参照。
  • A次に、の参照をの参照にコピーしますC。ここで、AとCは同じオブジェクトを参照しています

参照オブジェクトで使用する==場合、それらが同じオブジェクトを参照している場合は、を返しtrue、そうでない場合はを返しfalseます。

あなたの場合、それが理由B == Aで、をC == B返しますfalseが、で試した場合はA == C、を返しますtrue

于 2012-12-22T17:26:15.770 に答える
0

参照を比較しようとしているので、出力は正しいです。ここで、AとBは異なるオブジェクトであるため、比較するとfalseになります。A、Bはすべて異なるメモリ位置にあるため、それらの参照は等しくありません。

于 2012-12-22T17:12:11.520 に答える
0

参照タイプは、アドレスをメモリに保持します。あなたの場合、AとBは完全に異なるアドレスを指しています。ただし、AをCに割り当てるため、CはAと同じアドレスを指しています。

于 2012-12-22T17:13:06.157 に答える