2009-10-27 9 views
12

Bu kod nasıl derlenebilir? Operatör int'deki aşağıdaki kod, MyValue sınıfının özel bir değişkenine erişebilir mi? Niye ya?Statik bir yöntem içinde bir parametrenin özel üyesine erişim?

class Program 
{ 
    static void Main(string[] args) 
    { 
     Myvalue my = new Myvalue(100); 
     Console.WriteLine(my + 100); 
     Console.Read(); 
    } 
} 


public class Myvalue 
{ 
    private int _myvalue; 

    public Myvalue(int value) 
    { 
     _myvalue = value; 
    } 

    public static implicit operator int(Myvalue v) 
    { 
     return v._myvalue; 
    } 
} 

cevap

18

Bu sınıfta olduğu için, içinde özel değişkenlere erişimi vardır. Tıpkı senin örneğindeki kamu yöntemleri gibi. Bunun tersi de çalışır. Monostate desen oluşturmak için örnek üyelerden özel statik üyelere erişebilirsiniz.

+0

Eğer sınıf statik olurdu, anlayabiliyordum. Ancak nesne parametre tarafından geçirildiği için, neden erişim sağlayıcıya sahip olmayı gerektirmiyor? –

+3

@Daok: Statik yönteminiz sınıfın bir üyesi olduğu için. Bu statik yöntem başka bir yerde olsaydı izin verilmezdi. –

+0

Tamam, hassasiyet için teşekkürler. –

5

operator int(), yine de MyValue sınıfının bir üyesi işlevidir ve bu nedenle MyValue türündeki nesnelerin tüm alanlarına erişebilir.

Statik yalnızca bir MyValue nesnesinin işleve bir parametre olarak geçirilmesi gerektiğine dikkat edin.

14

private, sınıf için özel ve örnek için gizli olmayan anlamına gelir.

+2

+1 - İyi, doğru ve özlü sözler! – Nate

+1

+1 gerçekten: http://stackoverflow.com/questions/888224/what-is-your-longest-held-programming-assumption-that-turned-out-to-be-incorrect/888246#888246 –

+1

Hum, değil örnek için özel? Bunun yanlış olduğunu düşünüyorum çünkü kullanamam: Myvalue my = new Myvalue (100); my._Myvalue = 1; Çünkü "benim" özel değişkene erişemiyor. –