C#中的引用类型比较

时间:2012-12-22 17:10:27

标签: c# .net oop class reference-type

我想了解下面的问题。我想知道为什么B == AC == 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);
        }
    }
}

输出:

  


  假

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

在.NET中,类是引用类型。引用类型有两件事。 对象 以及 对象的引用

在您的情况下,A是对ObjectA的引用,B是对ObjectB的引用。

定义Class1 C = A;

  
      
  • 首先,你创造了两件事。一个名为 ObjectC 的对象和一个名为 C 的对象的引用。
  •   
  • 然后,您将A的引用复制为C的引用。现在, A和C引用同一个对象
  •   

当您对引用对象使用==时,如果它们引用相同的objets,则返回true,否则返回false

在您的情况下,这就是B == AC == B返回false的原因,但如果您尝试使用A == C,则会返回true

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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