Eşitlik karşılaştırmaları (C# Programlama Kılavuzu)

Bazen eşitlik için iki değeri karşılaştırmak gerekir. Bazı durumlarda, eşitlik olarak da bilinen değer eşitliğini test ediyor olursunuz; bu da iki değişkenin içerdiği değerlerin eşit olduğu anlamına gelir. Diğer durumlarda, iki değişkenin bellekteki aynı temel nesneye başvurup başvurmadığını belirlemeniz gerekir. Bu eşitlik türüne başvuru eşitliği veya kimlik adı verilir. Bu konu, bu iki eşitlik türünü açıklar ve daha fazla bilgi için diğer konulara bağlantılar sağlar.

Başvuru eşitliği

Başvuru eşitliği, iki nesne başvurusunun aynı temel nesneye başvurduğunu gösterir. Bu, aşağıdaki örnekte gösterildiği gibi basit atama yoluyla gerçekleşebilir.

using System;
class Test
{
    public int Num { get; set; }
    public string Str { get; set; }

    public static void Main()
    {
        Test a = new Test() { Num = 1, Str = "Hi" };
        Test b = new Test() { Num = 1, Str = "Hi" };

        bool areEqual = System.Object.ReferenceEquals(a, b);
        // False:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);

        // Assign b to a.
        b = a;

        // Repeat calls with different results.
        areEqual = System.Object.ReferenceEquals(a, b);
        // True:
        System.Console.WriteLine("ReferenceEquals(a, b) = {0}", areEqual);
    }
}

Bu kodda iki nesne oluşturulur, ancak atama deyiminden sonra her iki başvuru da aynı nesneye başvurur. Bu nedenle, başvuru eşitliği vardır. İki başvurunun ReferenceEquals aynı nesneye başvurup başvurmadığını belirlemek için yöntemini kullanın.

Başvuru eşitliği kavramı yalnızca başvuru türleri için geçerlidir. Değer türünün bir örneği bir değişkene atandığında değerin bir kopyası yapıldığından, değer türü nesnelerinin başvuru eşitliği olamaz. Bu nedenle, bellekte aynı konuma başvuran iki kutulanmamış yapıya sahip olamazsınız. Ayrıca, iki değer türünü karşılaştırmak için kullanırsanız ReferenceEquals , nesnelerin içerdiği değerlerin tümü aynı olsa bile sonuç her zaman olur false. Bunun nedeni, her değişkenin ayrı bir nesne örneğinde kutulanmış olmasıdır. Daha fazla bilgi için bkz . Başvuru eşitliğini (Kimlik) test etme.

Değer eşitliği

Değer eşitliği, iki nesnenin aynı değeri veya değerleri içerdiği anlamına gelir. int veya bool gibi ilkel değer türleri için değer eşitliği testleri basittir. aşağıdaki örnekte gösterildiği gibi işlecini kullanabilirsiniz == .

int a = GetOriginalValue();  
int b = GetCurrentValue();  
  
// Test for value equality.
if (b == a)
{  
    // The two integers are equal.  
}  

Diğer türlerin çoğunda değer eşitliği testi daha karmaşıktır çünkü türün bunu nasıl tanımladığını anlamanız gerekir. Birden çok alan veya özelliğe sahip sınıflar ve yapılar için, değer eşitliği genellikle tüm alanların veya özelliklerin aynı değere sahip olduğu anlamına gelir. Örneğin, pointA.X noktaB.X'e eşitse ve noktaA.Y noktaB.Y'ye eşitse, iki Point nesne eşdeğer olarak tanımlanabilir. Kayıtlarda değer eşitliği, bir kayıt türünün iki değişkeninin, türler eşleşirse ve tüm özellik ve alan değerleri eşleşirse eşit olduğu anlamına gelir.

Ancak, denkliğin bir türdeki tüm alanları temel alarak yapılması gerekmez. Bir alt kümeyi temel alabilir. Sahip olmadığınız türleri karşılaştırırken, özellikle bu tür için denkliğin nasıl tanımlandığını anlamalısınız. Kendi sınıflarınızda ve yapılarınızda değer eşitliğini tanımlama hakkında daha fazla bilgi için bkz . Tür için değer eşitliğini tanımlama.

Kayan nokta değerleri için değer eşitliği

Kayan nokta değerlerinin (çift ve kayan) eşitlik karşılaştırmaları, ikili bilgisayarlarda kayan nokta aritmetiğinin kararsızlığı nedeniyle sorunludur. Daha fazla bilgi için konu başlığındaki System.Doubleaçıklamalara bakın.

Ünvan Açıklama
Başvuru eşitliğini test etme (Kimlik) İki değişkenin başvuru eşitliğine sahip olup olmadığının nasıl belirleneceğini açıklar.
Bir tür için değer eşitliğini tanımlama Bir tür için değer eşitliğinin özel tanımının nasıl sağlandığı açıklanır.
Türler C# türü sistemi hakkında bilgi ve ek bilgilere bağlantılar sağlar.
Records Varsayılan olarak değer eşitliğini test eden kayıt türleri hakkında bilgi sağlar.