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.
readonly
anahtar sözcüğü beş bağlamda kullanılabilecek bir değiştiricidir:
Alan bildiriminde,
readonly
alana atamanın yalnızca bildirimin bir parçası olarak veya aynı sınıftaki bir oluşturucuda gerçekleşebileceğini gösterir. Salt okunur bir alan, alan bildirimi ve oluşturucu içinde birden çok kez atanabilir ve yeniden atanabilir.Bir
readonly
alan, oluşturucu çıktıktan sonra atanamaz. Bu kuralın değer türleri ve başvuru türleri için farklı etkileri vardır:- Değer türleri doğrudan verilerini içerdiği için, değer türü olan bir
readonly
alan sabittir. - Başvuru türleri verilerine başvuru içerdiğinden, başvuru türü olan bir
readonly
alan her zaman aynı nesneye başvurmalıdır. Bu nesne sabit olmayabilir. Değiştirici,readonly
alan 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 struct
tanımında,readonly
yapı türünün sabit olduğunu gösterir. Daha fazla bilgi içinreadonly
makalesinin 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ğini gösterir. Daha fazla bilgi içinreadonly
makalesinin örnek üyeleri bölümüne bakın.Bir
ref readonly
yöntem döndürücüsundareadonly
değiştirici, yöntemin bir başvuru döndürdüğünü ve bu başvuruya yazmalara izin verilmediğini gösterir.- Bir
ref readonly
yönteme parametre bildirmek için.
- Bir
Salt okunur alan örneği
Bu örnekte, sınıf oluşturucusunda bir değer atanmış olmasına rağmen, year
alanının değeri ChangeYear
yönteminde değiştirilemez.
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:
Bildirimde değişken başlatıldığında, ö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 const
alan yalnızca alanın bildiriminde başlatılabilir. Bir readonly
alan, alan bildiriminde ve herhangi bir oluşturucuda birden çok kez atanabilir. 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
yapı durumunu değiştirmediğini bildirmek için değiştiriciyi de kullanabilirsiniz.
public readonly double Sum()
{
return X + Y;
}
Uyarı
Okuma/yazma özelliği söz konusu olduğunda, readonly
değiştiriciyi get
erişimciye ekleyebilirsiniz. Bazı get
erişimciler, yalnızca özel bir alanın değerini döndürmek yerine hesaplama yapabilir ve sonucu önbelleğe alabilir. Değiştiriciyi readonly
erişimciye get
eklemek, erişimcinin get
herhangi bir sonucu önbelleğe alarak nesnenin iç durumunu değiştirmediğini garanti eder.
readonly
makalesinin örnek üyeleri bölümünde daha fazla örnek bulabilirsiniz.
Ref readonly return örneği
readonly
üzerindeki ref return
değiştirici, döndürülen başvurunun değiştirilemeyeceğ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.
ref
tarafından döndürülebilecek herhangi bir tür ref readonly
tarafından da döndürülebilir.
Salt okunur ref (başvuru) salt okunur dönüş (return) örneği
Bir ref readonly return
, readonly
türlerdeki struct
örnek üyeleriyle de kullanılabilir.
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.
Dil belirtimi tekliflerini de görebilirsiniz: