繁体   English   中英

C#中的引用类型比较

[英]Reference Type comparison in C#

我试图理解下面的问题。 我想知道为什么在下面的程序中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);
        }
    }
}

输出:


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

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

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

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

在你的情况, A是对一个参考ObjectAB是对一个参考ObjectB

当您定义Class1 C = A;

  • 首先,创建两件事。 一个称为ObjectC的对象和对该对象的引用C。
  • 然后,将A的引用复制到C引用。 现在, A和C引用相同的对象

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM