Object.ReferenceEquals(Object, Object) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Belirtilen Object örneklerin aynı örnek olup olmadığını belirler.
public:
static bool ReferenceEquals(System::Object ^ objA, System::Object ^ objB);
public static bool ReferenceEquals(object objA, object objB);
static member ReferenceEquals : obj * obj -> bool
Public Shared Function ReferenceEquals (objA As Object, objB As Object) As Boolean
Parametreler
- objA
- Object
Karşılaştıracak ilk nesne.
- objB
- Object
Karşılaştıracak ikinci nesne.
Döndürülenler
true veya objA ile aynı örnekse objB veya her ikisi de null ise, değilse, false.
Örnekler
Aşağıdaki örnek, iki nesnenin aynı örnek olup olmadığını belirlemek için kullanır ReferenceEquals .
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));
// This code produces the following output:
// True
// True
// False
let o: obj = null
let mutable p: obj = null
let q = obj ()
printfn $"{Object.ReferenceEquals(o, p)}"
p <- q
printfn $"{Object.ReferenceEquals(p, q)}"
printfn $"{Object.ReferenceEquals(o, p)}"
// This code produces the following output:
// True
// True
// False
Public Class App
Public Shared Sub Main()
Dim o As Object = Nothing
Dim p As Object = Nothing
Dim q As New Object
Console.WriteLine(Object.ReferenceEquals(o, p))
p = q
Console.WriteLine(Object.ReferenceEquals(p, q))
Console.WriteLine(Object.ReferenceEquals(o, p))
End Sub
End Class
' This code produces the following output:
'
' True
' True
' False
'
Açıklamalar
yönteminden Equals ve eşitlik işlecinden farklı olarak ReferenceEquals , yöntem geçersiz kılınamaz. Bu nedenle, eşitlik için iki nesne başvurularını test etmek istiyorsanız ve yönteminin Equals uygulanmasından emin değilseniz yöntemini çağırabilirsiniz ReferenceEquals .
Ancak, yönteminin ReferenceEquals dönüş değeri şu iki senaryoda anormal görünebilir:
Değer türleri karşılaştırırken. ve
objBdeğer türleriyseobjA, yöntemine ReferenceEquals geçirilmeden önce kutulanırlar. Bu, hem hem deobjAobjBbir değer türünün aynı örneğini temsil ederse, ReferenceEquals aşağıdaki örnekte gösterildiği gibi yönteminin yine de döndürdüğüfalseanlamına gelir.int int1 = 3; Console.WriteLine(Object.ReferenceEquals(int1, int1)); Console.WriteLine(int1.GetType().IsValueType); // The example displays the following output: // False // Truelet int1 = 3 printfn $"{Object.ReferenceEquals(int1, int1)}" printfn $"{int1.GetType().IsValueType}" // The example displays the following output: // False // TruePublic Module Example Public Sub Main Dim int1 As Integer = 3 Console.WriteLine(Object.ReferenceEquals(int1, int1)) Console.WriteLine(int1.GetType().IsValueType) End Sub End Module ' The example displays the following output: ' False ' TrueKutulama değer türleri hakkında bilgi için bkz. Kutulama ve Kutu açma.
Dizeleri karşılaştırırken.
objAveobjBdize ise, ReferenceEquals dizenin interned olup olmadığını yöntemi döndürürtrue. Değer eşitliği için bir test gerçekleştirmez. Aşağıdaki örnekte ves1s2eşittir çünkü bunlar tek bir interned dizenin iki örneğidir. Ancak,s3ves4eşit değildir, çünkü aynı dize değerlerine sahip olsalar da, bu dize interned değildir.String s1 = "String1"; String s2 = "String1"; Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2)); Console.WriteLine("{0} interned: {1}", s1, String.IsNullOrEmpty(String.IsInterned(s1)) ? "No" : "Yes"); String suffix = "A"; String s3 = "String" + suffix; String s4 = "String" + suffix; Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4)); Console.WriteLine("{0} interned: {1}", s3, String.IsNullOrEmpty(String.IsInterned(s3)) ? "No" : "Yes"); // The example displays the following output: // s1 = s2: True // String1 interned: Yes // s3 = s4: False // StringA interned: Noopen System let s1 = "String1" let s2 = "String1" printfn $"s1 = s2: {Object.ReferenceEquals(s1, s2)}" printfn $"""{s1} interned: {if String.IsNullOrEmpty(String.IsInterned s1) then "No" else "Yes"}""" let suffix = "A" let s3 = "String" + suffix let s4 = "String" + suffix printfn $"s3 = s4: {Object.ReferenceEquals(s3, s4)}" printfn $"""{s3} interned: {if String.IsNullOrEmpty(String.IsInterned s3) then "No" else "Yes"}""" // The example displays the following output: // s1 = s2: True // String1 interned: Yes // s3 = s4: False // StringA interned: NoModule Example Public Sub Main() Dim s1 As String = "String1" Dim s2 As String = "String1" Console.WriteLine("s1 = s2: {0}", Object.ReferenceEquals(s1, s2)) Console.WriteLine("{0} interned: {1}", s1, If(String.IsNullOrEmpty(String.IsInterned(s1)), "No", "Yes")) Dim suffix As String = "A" Dim s3 = "String" + suffix Dim s4 = "String" + suffix Console.WriteLine("s3 = s4: {0}", Object.ReferenceEquals(s3, s4)) Console.WriteLine("{0} interned: {1}", s3, If(String.IsNullOrEmpty(String.IsInterned(s3)), "No", "Yes")) End Sub End Module ' The example displays the following output: ' s1 = s2: True ' String1 interned: Yes ' s3 = s4: False ' StringA interned: NoDize stajyeri hakkında daha fazla bilgi için bkz String.IsInterned. .