C# Record Nedir?

C# 9.0 ile birlikte Record adında yeni bir özellik tanıttı. Record (kayıt) nesnesi, değişmez (immutable) veri yapısıdır ve sadece verileri saklar. Record özellikle veri transfer nesneleri (data transfer objects – DTOs) veya veri saklama nesneleri (data storage objects) gibi yapılar için çok uygundur.

Record Nesnesinin Özellikleri:

  1. Değişmezlik (Immutable): Bir kayıt nesnesi, bir kez oluşturulduğunda değiştirilemez. Yani nesnenin değerleri değiştirilemez ve nesnenin kendisi yeni bir nesne oluşturulmadan değiştirilemez.
  2. Özelleştirilmiş Eşitlik ve Karşılaştırma: Kayıtlar, varsayılan olarak değer tabanlı eşitlik ve karşılaştırma mantığına sahiptir. Ancak bu davranışı özelleştirebilirsiniz.
  3. İsimlendirilmiş Değişkenler: Kayıtların her alanı (property) otomatik olarak bir “init” erişim belirleyicisi ile oluşturulur ve bu alanlar isimlendirilir. Bu, kayıt nesnesinin alanlarını oluştururken ve sadece oluşturulduğu zaman erişilebileceği anlamına gelir.
  4. Özelleştirilebilir Yapıcı Metot: Kayıtlar, özel yapıcı metotlar eklemek için kullanılabilir.
record Person
{
    public string FirstName { get; init; }
    public string LastName { get; init; }
    public int Age { get; init; }

    public Person(string firstName, string lastName, int age)
    {
        FirstName = firstName;
        LastName = lastName;
        Age = age;
    }

    // Özel bir metot ekleyebilirsiniz
    public string GetFullName()
    {
        return $"{FirstName} {LastName}";
    }
}

class Program
{
    static void Main()
    {
        // Kayıt nesnesi oluşturma
        var person = new Person("John", "Doe", 30);

        // Alanlara erişim
        Console.WriteLine($"Ad: {person.FirstName}");
        Console.WriteLine($"Soyad: {person.LastName}");
        Console.WriteLine($"Yaş: {person.Age}");

        // Özel metodu çağırma
        Console.WriteLine($"Tam Ad: {person.GetFullName()}");

        // Kayıtlar değişmezdir, bu nedenle aşağıdaki satır hata verir:
        // person.Age = 31;

        // Farklı bir kayıt nesnesi oluşturma
        var anotherPerson = new Person("Jane", "Smith", 25);

        // Kayıtları karşılaştırma
        if (person == anotherPerson)
        {
            Console.WriteLine("Aynı kişiye aittir.");
        }
        else
        {
            Console.WriteLine("Farklı kişilere aittir.");
        }
    }
}

Bu örnekte, Person adında bir kayıt nesnesi tanımladık. Kayıt, FirstName, LastName, ve Age adında üç özellik içerir. Bu özellikler, init erişim belirleyicisi ile işaretlidir. Bu da sadece nesnenin oluşturma esnası sırasında değer atanabileceğini daha sonra değiştirilemeyeceği anlamına gelir.

Ayrıca, GetFullName adlı bir özel metot ekledik, böylece kayıt nesnesi içinde özel metotlar tanımlanabilir.

Programın ana bölümünde, bir kayıt nesnesi oluşturuldu, alanlarına erişildi, özel bir metot çağrıldı, ve farklı iki kayıt nesnesi karşılaştırıldı. Nesnelerimiz artık değer tipli bir yapıya büründüklerinden dolayı nesneler üzerinden karşılaştırma yapabilirsiniz. Bilindiği üzere normal bir class üzerinden alınmış bir nesne üzerinden karşılaştırma yaparsanız eğer referanslar farklı olduğundan dolayı bu tip bir karşılaştırma da false döner.

Değişmezlik özelliği sayesinde alanlara bir kez değer atanır ve sonradan değiştirilemez.