簡體   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