2010-08-02 18 views
5

C# 'da, readonly getter fonksiyonunu tanımlamak şu şekilde ayarlanamaz:C# gibi bir alıcı işlevini VB.NET gibi ReadOnly olarak tanımlamanın bir yolu var mı?

private int _id; 

public int Id 
{ 

    get { return _id; } 
    // no setter defined 
} 

in VB.NET

Private _id as Integer 
Public Readonly Property Id() As Integer 
    Get 
     Return _id 
    End Get 
End Property 

readonly gibi bir fonksiyonu etiketlemek mümkün mü VB NET'te olduğu gibi daha ayrıntılı olmak için?

+2

Daha ayrıntılı olabilmek için ?! Bu ne için ... – Tahbaza

+0

"Daha fazla ayrıntı" derken ne diyorsunuz? Kod örneğinizle, atamayı denediyseniz, VB.NET'te yaptığınız gibi aynı derleyici hatasını alırsınız. Intellisense, bunu yalnızca bir gettable öğesi olarak tanımlamalıdır. –

+1

@Jonathan: Daha okunaklı bir özellik olduğu sonucuna varmaktan ziyade, okuyucu için daha açık bir orandır. Pasörlük yokluğu kendini temize özellik salt okunur olduğunu yapar –

cevap

10

ReadOnly VB'de ne olduğunu bilmiyorum. Ben alabilirsiniz en açık aslında daha az ayrıntılı olduğunu tahmin: C# '

public int Id { get; private set; } 

, readonly bir alanın değeri nesnenin oluşturulması sırasında ayarlanmış olduğunu belirtir ve yapıcı çıkar sonra değiştirilemez.

private readonly int _id; // note field marked as 'readonly' 

public int Id 
{ 
    get { return _id; } 
} 

Maalesef otomatik özelliklere (Ben ilk kod parçacığı göstermek gibi) readonly izin verilmez: Sen aracılığıyla kazanmasını sağlayabilecek. Diğer bir deyişle, sınıfınızın kodunun hiçbirinin kurucudan çıktıktan sonra özel diziyi çağırmamasını sağlayarak salt okunur semantiği kendiniz uygulamanız gerekir. Bu, VB'nin ReadOnly kullanımından bahsettiğinize göre farklıdır.

EDIT Thomas'ın işaret ettiği gibi, hiçbir alıcıya sahip olmak özel bir kişiden farklıdır. Ancak VB's usage of ReadOnly özellikleri ile kullanıldığında en azından zaman, C# birine farklıdır:

' Only code inside class employee can change the value of hireDateValue. 
Private hireDateValue As Date 
' Any code that can access class employee can read property dateHired. 
Public ReadOnly Property dateHired() As Date 
    Get 
     Return hireDateValue 
    End Get 
End Property 

C# programcı için, ReadOnly kelime gereksiz görünüyor. Hiç bir belirleyicinin mevcut olmadığı gerçeği zaten ima edilmiştir.

Bildiğim kadarıyla alanları ile ilgili olarak, C# ve VB eşdeğer görünmektedir.

+1

Özel bir ayarlayıcıya sahip olmak hiç bir düzenleyici ile aynı değildir ... Sadece setterin sadece sınıfın içinden erişilebilir olduğu anlamına gelir. Böyle bir özellik sadece dışarıdan okunabilir –

İlgili konular