Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Anahtar sözcüğünü readonly beş bağlamda değiştirici olarak kullanın:
Alan bildiriminde,
readonlyalanı yalnızca bildirim sırasında veya aynı sınıftaki bir oluşturucuda atayabileceğiniz anlamına gelir. Salt okunur bir alanı alan bildirimi ve oluşturucu içinde birden çok kez atayabilir ve yeniden atayabilirsiniz.Oluşturucu tamamlandıktan sonra alan
readonlyatayamazsınız. Bu kural, değer türlerini ve başvuru türlerini farklı şekilde etkiler:- Değer türleri doğrudan verilerini içerdiği için, değer türü olan bir
readonlyalan sabittir. - Başvuru türleri verilerine başvuru içerdiğinden, başvuru türü olan bir
readonlyalan her zaman aynı nesneye başvurmalıdır. Bu nesne sabit olmayabilir. Değiştirici,readonlyalan değerinin başvuru türünün farklı bir örneğiyle değiştirilmesini engeller. Ancak değiştirici, alanın örnek verilerinin salt okunur alan aracılığıyla değiştirilmesini engellemez.
Uyarı
Değiştirilebilir başvuru türü olan, dışarıdan görünür salt okunur bir alan içeren dışarıdan görünür bir tür bir güvenlik açığı olabilir ve CA2104 uyarısını tetikleyebilir: "Salt okunur değiştirilebilir başvuru türlerini bildirme."
- Değer türleri doğrudan verilerini içerdiği için, değer türü olan bir
Tür
readonly structtanımında,readonlyyapı türünün sabit olduğu anlamına gelir. Daha fazla bilgi içinreadonlymakalesinin yapı bölümüne bakın.Bir yapı türü içindeki örnek üye bildiriminde,
readonlyörnek üyesinin yapının durumunu değiştirmediği anlamına gelir. Daha fazla bilgi içinreadonlymakalesinin örnek üyeleri bölümüne bakın.Bir
ref readonlyyöntem döndürücüsundareadonlydeğiştirici, yöntemin bir başvuru döndürdüğünü ve bu başvuruya yazmalara izin verilmediğini gösterir.- Bir
ref readonlyyönteme parametre bildirmek için.
- Bir
C# dili başvuru belgesi, C# dilinin en son yayımlanan sürümünü gösterir. Ayrıca, yaklaşan dil sürümü için genel önizlemelerdeki özelliklere yönelik ilk belgeleri içerir.
Belgelerde ilk olarak dilin son üç sürümünde veya geçerli genel önizlemelerde sunulan tüm özellikler tanımlanır.
Tavsiye
Bir özelliğin C# dilinde ilk tanıtıldığı zamanları bulmak için C# dil sürümü geçmişi makalesine bakın.
Salt okunur alan örneği
Bu örnekte, sınıf oluşturucu buna bir değer year atasa bile yöntemindeki alanın ChangeYear değerini değiştiremezsiniz:
class Age
{
private readonly int _year;
Age(int year)
{
_year = year;
}
void ChangeYear()
{
//_year = 1967; // Compile error if uncommented.
}
}
Alana yalnızca aşağıdaki bağlamlarda bir readonly değer atayabilirsiniz:
Bildiriminde değişkenini başlatırken, örneğin:
public readonly int y = 5;Sınıfın, örnek alanı bildirimini içeren bir örnek oluşturucusunda.
Statik alan bildirimini içeren sınıfın statik oluşturucusunda.
Bu oluşturucu bağlamları aynı zamanda bir readonly alanı out veya ref parametresi olarak geçirmek için geçerli olan tek bağlamlardır.
Uyarı
anahtar readonly sözcüğü const anahtar sözcüğünden farklıdır. Bir alanı yalnızca alanın bildiriminde başlatabilirsiniz const . Alan bildiriminde ve herhangi bir oluşturucuda bir readonly alanı birden çok kez atayabilirsiniz. Bu nedenle, readonly kullanılan oluşturucuya bağlı olarak alanlar farklı değerlere sahip olabilir. Ayrıca, bir const alan bir derleme zamanı sabiti olsa da, readonly aşağıdaki örnekte olduğu gibi çalışma zamanı sabitleri için kullanılabilir:
public static readonly uint timeStamp = (uint)DateTime.Now.Ticks;
public class SamplePoint
{
public int x;
// Initialize a readonly field
public readonly int y = 25;
public readonly int z;
public SamplePoint()
{
// Initialize a readonly instance field
z = 24;
}
public SamplePoint(int p1, int p2, int p3)
{
x = p1;
y = p2;
z = p3;
}
public static void Main()
{
SamplePoint p1 = new SamplePoint(11, 21, 32); // OK
Console.WriteLine($"p1: x={p1.x}, y={p1.y}, z={p1.z}");
SamplePoint p2 = new SamplePoint();
p2.x = 55; // OK
Console.WriteLine($"p2: x={p2.x}, y={p2.y}, z={p2.z}");
}
/*
Output:
p1: x=11, y=21, z=32
p2: x=55, y=25, z=24
*/
}
Yukarıdaki örnekte, aşağıdaki örnekte olduğu gibi bir deyim kullanıyorsanız:
p2.y = 66; // Error
derleyici hata iletisini alırsınız:
Yalnızca okunabilir bir alana atanamaz (yalnızca oluşturucu veya değişken başlatıcıda)
Salt okunur örnek üyeleri
Bir örnek üyesinin readonly bir yapının durumunu değiştirmediğini bildirmek için değiştiriciyi kullanın.
public readonly double Sum()
{
return X + Y;
}
Uyarı
Okuma/yazma özelliği için değiştiriciyi readonly erişimciye get ekleyebilirsiniz. Bazı get erişimciler, yalnızca özel bir alanın değerini döndürmek yerine hesaplama yapar ve sonucu önbelleğe alır. Değiştiriciyi readonly erişimciye get ekleyerek, erişimcinin get herhangi bir sonucu önbelleğe alarak nesnenin iç durumunu değiştirmediğini garanti edebilirsiniz.
Daha fazla örnek için Yapı türleri makalesinin örnek üyeleri bölümüne bakınreadonly.
Ref readonly return örneği
readonly üzerindeki ref return değiştirici, döndürülen başvurunun değiştirilebileceğini gösterir. Aşağıdaki örnek, çıkış noktası için bir başvuru döndürür. Çağıranların readonly kaynağı değiştiremediğini belirtmek için değiştiriciyi kullanır:
private static readonly SamplePoint s_origin = new SamplePoint(0, 0, 0);
public static ref readonly SamplePoint Origin => ref s_origin;
Döndürülen türün readonly struct olması gerekmez. Döndürebilen ref herhangi bir tür tarafından ref readonlyda döndürülebilir.
Salt okunur ref (başvuru) salt okunur dönüş (return) örneği
Ayrıca, türlerde struct örnek üyeleriyle birlikte readonly de ref readonly return kullanabilirsiniz:
public struct ReadonlyRefReadonlyExample
{
private int _data;
public readonly ref readonly int ReadonlyRefReadonly(ref int reference)
{
// _data = 1; // Compile error if uncommented.
return ref reference;
}
}
Yöntem, temelde örnek üyesi olan bir metot ile birlikte readonly bir başvuru döndürür; bu metot readonly hiçbir örnek alanını değiştiremez.
C# dil belirtimi
Daha fazla bilgi edinmek için, bkz. C# Dil Belirtimi. Dil belirtimi, C# söz dizimi ve kullanımı için kesin kaynaktır.