Kayıtlara giriş

Kayıt, veri modelleriyle çalışmak için özel söz dizimi ve davranış sağlayan bir sınıf veya yapıdır.

Kayıtların ne zaman kullanımı gerekir?

Aşağıdaki senaryolarda sınıf veya yapı yerine bir kayıt kullanmayı göz önünde bulundurarak:

Değer eşitliği

Kayıtlar için değer eşitliği, türler eş olursa ve tüm özellik ve alan değerleri eş olursa bir kayıt türünün iki değişkeninin eşit olduğu anlamına gelir. Sınıflar gibi diğer başvuru türleri için eşitlik, başvuru eşitliği anlamına gelir. Başka bir ifadeyle, bir sınıf türünün iki değişkeni aynı nesneye başvurursa eşittir. İki kayıt örneğinin eşitliğini belirleyen yöntemler ve işleçler değer eşitliğini kullanır.

Tüm veri modelleri değer eşitliğiyle iyi çalışmaz. Örneğin, Entity Framework Core varlık türünün yalnızca bir örneğini kavramsal olarak tek bir varlık için kullandığına emin olmak için başvuru eşitliği bağlıdır. Bu nedenle, kayıt türleri veri kaynaklarında varlık türleri olarak Entity Framework Core.

Değiştirilemezlik

Sabit tür, bir nesnenin örneği başladıktan sonra herhangi bir özellik veya alan değerlerini değiştirmesini engelleyen türlerdendir. İş parçacığı güvenli olması için bir türe ihtiyacınız olduğunda veya karma tabloda aynı kalan karma koda bağlıyken sabitlik yararlı olabilir. Kayıtlar, sabit türler oluşturmak ve bu türlerle çalışmak için kısa söz dizimi sağlar.

Sabitlik tüm veri senaryoları için uygun değildir. Entity Framework Core,sabit varlık türleriyle güncelleştirmeyi desteklemez.

Kayıtların sınıflardan ve yapılardan farkı

Sınıfları veya yapıları bildiren ve örneklendi eden aynı söz dizimi kayıtlarla kullanılabilir. anahtar sözcüğünü class ile veya record yerine record struct struct kullanın. Benzer şekilde, devralma ilişkilerini ifade etmek için de kayıt sınıfları tarafından aynı söz dizimi de kullanılır. Kayıtlar aşağıdaki yöntemlerle sınıflardan farklıdır:

  • Konumsal parametreleri kullanarak sabit özelliklere sahip bir tür oluşturabilir ve örneği oluşturabilirsiniz.
  • Sınıflarda (ve gibi) başvuru eşitliğini veya eşitsizliği belirten yöntemler ve işleçler, kayıtlarda değer eşitliğini veya eşitsizliği Object.Equals(Object) == gösteriyor.
  • Bir ifade with kullanarak, seçili özelliklerde yeni değerlerle sabit bir nesnenin kopyasını oluşturabilirsiniz.
  • Bir kaydın yöntemi, bir nesnenin tür adını ve tüm genel özelliklerinin adlarını ve değerlerini ToString gösteren biçimlendirilmiş bir dize oluşturur.
  • Bir kayıt başka bir kayıttan devralabilir. Kayıt bir sınıftan devralınabilir ve bir kayıttan devralınabilir.

Kayıt yapılarının, derleyicinin ve yöntemlerini eşitlik için sentezlediği yapılardan ToString farklıdır. Derleyici konumsal kayıt Deconstruct yapılarına yönelik bir yöntemi sentezler.

Örnekler

Aşağıdaki örnek, bir kaydı bildirip örnek olarak vermek için konumsal parametreleri kullanan bir ortak kayıt tanımlar. Ardından tür adını ve özellik değerlerini yazdırır:

public record Person(string FirstName, string LastName);

public static void Main()
{
    Person person = new("Nancy", "Davolio");
    Console.WriteLine(person);
    // output: Person { FirstName = Nancy, LastName = Davolio }
}

Aşağıdaki örnek, kayıtlarda değer eşitliğini gösteriyor:

public record Person(string FirstName, string LastName, string[] PhoneNumbers);

public static void Main()
{
    var phoneNumbers = new string[2];
    Person person1 = new("Nancy", "Davolio", phoneNumbers);
    Person person2 = new("Nancy", "Davolio", phoneNumbers);
    Console.WriteLine(person1 == person2); // output: True

    person1.PhoneNumbers[0] = "555-1234";
    Console.WriteLine(person1 == person2); // output: True

    Console.WriteLine(ReferenceEquals(person1, person2)); // output: False
}

Aşağıdaki örnek, sabit bir nesneyi kopyalamak ve özelliklerden birini değiştirmek with için ifade kullanımını gösterir:

public record Person(string FirstName, string LastName)
{
    public string[] PhoneNumbers { get; init; }
}

public static void Main()
{
    Person person1 = new("Nancy", "Davolio") { PhoneNumbers = new string[1] };
    Console.WriteLine(person1);
    // output: Person { FirstName = Nancy, LastName = Davolio, PhoneNumbers = System.String[] }

    Person person2 = person1 with { FirstName = "John" };
    Console.WriteLine(person2);
    // output: Person { FirstName = John, LastName = Davolio, PhoneNumbers = System.String[] }
    Console.WriteLine(person1 == person2); // output: False

    person2 = person1 with { PhoneNumbers = new string[1] };
    Console.WriteLine(person2);
    // output: Person { FirstName = Nancy, LastName = Davolio, PhoneNumbers = System.String[] }
    Console.WriteLine(person1 == person2); // output: False

    person2 = person1 with { };
    Console.WriteLine(person1 == person2); // output: True
}

Daha fazla bilgi için bkz. Kayıtlar (C# başvurusu).

C# Dil Belirtimi

Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# sözdizimi ve kullanımı için kesin bir kaynaktır.