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);
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ırma yapılacak ilk nesne.
- objB
- Object
Karşılaştıracak ikinci nesne.
Döndürülenler
true
ile aynı örnekse objA
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 .
using namespace System;
int main()
{
Object^ o = nullptr;
Object^ p = nullptr;
Object^ q = gcnew 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
*/
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, iki nesne başvurularını eşitlik için 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
objB
değer türleriyseobjA
, yöntemine ReferenceEquals geçirilmeden önce kutulanırlar. Bu, hem hem deobjA
objB
bir değer türünün aynı örneğini temsil ederse, yöntemin ReferenceEquals yine de aşağıdaki örnekte gösterildiği gibi döndürdüğüfalse
anlamına gelir.int int1 = 3; Console.WriteLine(Object.ReferenceEquals(int1, int1)); Console.WriteLine(int1.GetType().IsValueType); // The example displays the following output: // False // True
let int1 = 3 printfn $"{Object.ReferenceEquals(int1, int1)}" printfn $"{int1.GetType().IsValueType}" // The example displays the following output: // False // True
Public 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 ' True
Kutulama değer türleri hakkında bilgi için bkz. Kutulama ve Kutu açma.
Dizeleri karşılaştırırken. ve
objA
objB
dizeyse, ReferenceEquals dizenin iç içe geçmiş olması durumunda yöntemi döndürürtrue
. Değer eşitliği için bir test gerçekleştirmez. Aşağıdaki örnekte,s1
s2
tek bir interned dizenin iki örneği olduklarından eşittir. Ancak,s3
ves4
eş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: No
open 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: No
Module 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: No
Dize stajyeri hakkında daha fazla bilgi için bkz String.IsInterned. .