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);
        }
    }
}

输出:


4

5 回答 5

2

A 和 B 是不同的对象。它们属于同一类,但不是同一实例。就像两个人都可以是人,但他们不是同一个人。

于 2012-12-22T17:13:49.117 回答
1

在 .NET 中,类是引用类型。引用类型有两件事。Object对 object 的引用

在您的情况下,A是对 的引用ObjectAB是对 的引用ObjectB

当你定义Class1 C = A;

  • 首先,你创建了两个东西。一个名为ObjectC的对象和一个对名为C的对象的引用。
  • 然后你将参考复制A到参考C。现在,A 和 C 是对同一个对象的引用

与引用对象一起使用==时,如果它们引用相同的对象,则返回true,否则返回false

在您的情况下,这就是为什么B == A并且C == B返回false,但是如果您尝试使用A == C,它会返回true

于 2012-12-22T17:26:15.770 回答
1

您正在比较两个类实例的引用。由于 A 和 B 位于不同的内存位置,因此它们的引用不相等。如果要测试类相等性,则需要覆盖该Equals()方法。 http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx

在您的示例中,如果您要进行测试A == C,您会看到它返回true,因为它们都指向内存中的相同位置。

于 2012-12-22T17:15:00.627 回答
0

当您尝试比较参考时,输出是正确的。这里 A 和 B 是不同的对象,因此它们在比较时会导致错误。A、B 都位于不同的内存位置,因此它们的引用不相等。

于 2012-12-22T17:12:11.520 回答
0

引用类型将地址保存在内存中。在您的情况下,A 和 B 完全指向不同的地址。但是,由于您将 A 分配给 C,因此 C 指向的地址与 A 相同。

于 2012-12-22T17:13:06.157 回答