2009-10-27 28 views
12

Mã này có thể biên dịch như thế nào? Mã bên dưới trong toán tử int CÓ THỂ truy cập một biến riêng của lớp MyValue? Tại sao?Truy cập thành viên riêng của tham số trong một phương thức tĩnh?

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; 
    } 
} 

Trả lời

18

Vì ở trong lớp, nó có quyền truy cập vào các biến riêng tư trong đó. Cũng giống như các phương thức công khai của bạn. Nó cũng hoạt động ngược lại. Bạn có thể truy cập các thành viên tĩnh riêng từ các thành viên cá thể để tạo ra một mẫu Monostate.

+0

Nếu lớp học đã là tĩnh tôi sẽ hiểu. Nhưng kể từ khi đối tượng được thông qua bởi tham số, tại sao nó không yêu cầu phải có accessor? –

+3

@Daok: Bởi vì phương pháp tĩnh của bạn là một thành viên của lớp. Nếu phương pháp tĩnh đó ở bất cứ nơi nào khác, nó sẽ không được phép. –

+0

Được rồi, cảm ơn sự chính xác. –

5

toán tử int() vẫn là hàm thành viên của lớp MyValue và do đó có thể truy cập tất cả các trường của đối tượng thuộc loại MyValue.

Lưu ý rằng tĩnh chỉ có nghĩa là đối tượng MyValue cần được chuyển đến hàm như một tham số.

14

private có nghĩa là riêng tư cho lớp học và không riêng tư cho cá thể đó.

+2

+1 - Vâng, chính xác, và pithy! – Nate

+1

+1 thực sự: http://stackoverflow.com/questions/888224/what-is-your-longest-held-programming-assumption-that-turned-out-to-be-incorrect/888246#888246 –

+1

Hum, not riêng cho cá thể? Tôi nghĩ nó sai vì tôi không thể sử dụng: Myvalue my = new Myvalue (100); my._Myvalue = 1; Vì cá thể "của tôi" không thể truy cập biến riêng tư. –

Các vấn đề liên quan