2012-10-04 17 views
3

我一直想知道兩個變量是否指向一個類的同一個實例。聽起來很明顯,但可以做到嗎?在.Net中如何檢查兩個標識符是否指向同一個對象的實例?

例如。想象一下,您有一個名爲「IsSameInstanceAs」的運算符的以下代碼。有沒有履行「IsSameInstanceAs」操作的邏輯作爲if語句使用.NET,C#裏面的註釋中規定的任何方式: -

public class MyClass 
{ 
    public String MyString; 

    public static void TestForSameInstance() 
    { 
     MyClass myInstanceA = new MyClass(); 
     MyClass myInstanceB = myInstanceA; 
     MyClass myInstanceC = new MyClass(); 

     myInstanceA.MyString = "A String"; 
     myInstanceC.MyString = myInstanceA.MyString; 

     if (myInstanceA IsSameInstanceAs myInstanceB) 
     { 
      // These are the same instance so they will match and this if is true 
     } 

     if (myInstanceA IsSameInstanceAs myInstanceC) 
     { 
      // These are not the same instance so they will not match and this if is false 
     } 
    } 
} 

我相信這不能做,但如果有人知道更好,然後請幫忙。請記住,我不想比較對象實例,我想知道它們是否是相同的實例。

約翰·湯普森

回答

2

Object.ReferenceEquals是相關方法。

確定指定的對象實例是否是相同的 實例。

+0

謝謝。那就是我一直在尋找的東西。 –

0

使用ReferenceEquals method

if (Object.ReferenceEquals(myInstanceA, myInstanceB)) 

從文檔:

「確定指定的Object實例是否是相同的 實例。」

0

通常,當您使用比較==操作上的對象,這正是它 然而,如果該對象的類型實現了比較操作的oveerload這可能不是在這種情況下,你可以隨時使用object.Reference.Equals(x,y)

保持爲真

因此,與大多數類型的幾乎所有從BCL(字符串是一個明顯的例外)

你可以做

x == y; //reference comparison for most reference types 
object.ReferenceEquals(x,y); //works in all cases 
x.Equals(y); //reference comparison for most reference types 

第一個和最後一個不同之處在於,第一個是編譯時類型,在後者中它是運行時類型。即使編譯時和運行時類型相同,它們也不能保證它們會產生相同的結果(它們應該但不過是良好的舉止強制執行)

由於它是第一個示例中編譯時類型的表達式這很重要,你可以重寫它

(object)x == (object)y; //always a reference comparison for reference types 

我個人使用object.ReferenceEquals而不是==與轉換。對我來說,這個方法更清楚地表明瞭這種打算。

0

來自MSDN:
以下示例使用ReferenceEquals來確定兩個對象是否是同一實例。

class MyClass { 

    static void Main() { 
     object o = null; 
     object p = null; 
     object q = new Object(); 

     Console.WriteLine(Object.ReferenceEquals(o, p)); 
     p = q; 
     Console.WriteLine(Object.ReferenceEquals(p, q)); 
     Console.WriteLine(Object.ReferenceEquals(o, p)); 
    } 
} 

這將產生以下輸出:

True 
True 
False 

ReferenceEquals(Object objA, Object objB)將返回true如果objA是相同的實例作爲objB或者如果兩者都null;否則,false

相關問題