C# Readonly

C#’ta readonly (salt okunur) anahtar kelimesi, aşağıdaki şekillerde kullanılan bir niteliyicidir.

1. Readonly Field

C#, readonly (salt okunur) niteliyicisini kullanarak bir field (alan) bildirmenize izin verilir. Readonly field ataması yapılırsa field’a yalnızca ilk deklere edildiğinde (Constructor’da ilk yükleme yapıldığında atama yapıldığında) ve bildirim zamanında değer ataması yapılabilir anlamına gelir.

internal class Program
{
    private static void Main(string[] args)
    {
        Person person = new Person("Fatih", "Alkan", 36);
    }
}
public class Person
{
    //Readonly değişken.
    public readonly string FirstName;
    public readonly string LastName;

    //Bildirim zamanında ataması yapılan readonly değişkeni
    public readonly int Age = 35;

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

        Console.WriteLine($"Adı: {FirstName} Soyadı: {LastName} Yaşı: {Age}");
    }
}

2. Readonly Struct

Readonly Struct, verilen struct’ın değişmez olduğunu gösterir. Readonly bir struct oluşturduğunuzda, field’larıda readonly niteyicisi ile kullanmak gerekir, bunu yapmazsanız derleyici hata verir. Kısaca readonly struct bir yapıda tüm alanlar readonly olmalıdır.

internal class Program
{
    private static void Main(string[] args)
    {
        Person person = new Person("Fatih", "Alkan");
    }
}
public readonly struct Person
{
    //Readonly değişken.
    public readonly string FirstName;
    public readonly string LastName;

    //Readonly olmayan atama yapılamaz.
    //public int Age = 35;

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;

        Console.WriteLine($"Adı: {FirstName} Soyadı: {LastName}");
    }
}

3. Readonly Member

Bu özellik C# 8.0’da sunulmuştur. Bu özellikte, struct’ın kendisini readonly yapmadan herhangi bir üyesine readonly niteliyicisi kullanmanıza izin verilir. Tüm struct’ı readonly okunur olarak uygulamaktan daha iyidir.

internal class Program
{
    private static void Main(string[] args)
    {
        Person person = new Person("Fatih", "Alkan");
    }
}
public struct Person
{
    //Readonly değişken.
    public readonly string FirstName;
    public string LastName;

    public Person(string firstName, string lastName)
    {
        FirstName = firstName;
        LastName = lastName;

        Console.WriteLine($"Adı: {FirstName} Soyadı: {LastName}");
    }
}

Readonly ile Const Arasında ki Farklar Nelerdir?

ReadonlyConst
ReadOnly bir çalışma zamanı sabitidir.Const bir derleme zamanı sabitidir.
Readonly field’ın değeri değiştirilebilir.Const field’ın değeri değiştirilemez.
Metot içinde bildirilemez.Metot içinde bildirilebilir.
Readonly field’larda, bildirimde ve constructor bölümünde değerler atayabiliriz.Const field’larında ise sadece bildirim zamanında değer atayabilirsiniz.
Statik niteliyicilerle kullanılabilir.Statik niteliyicilerle kullanılamaz.