2012-11-02 20 views
5

Nếu tôi có ObjectA, và nó có phương thức riêng GetPrice() và cũng có trường "cha mẹ" cùng loại, tại sao tôi có thể gọi GetPrice() trên cá thể gốc từ trong cá thể con?Tại sao tôi có thể gọi một phương thức riêng của một cá thể khác cùng loại bên ngoài trường hợp đó?

Ví dụ:

private decimal GetPrice() 
{ 
    ObjectA parent = Parent; 

    if(parent != null) 
    { 
     return parent.GetPrice(); // Why is this OK? 
    } 

    return 0; 
} 
+1

Bởi vì các nhà thiết kế ngôn ngữ nghĩ rằng nó sẽ làm việc theo cách đó? –

Trả lời

12

Bởi vì phương tiện cá nhân "không thể truy cập loại khác", không phải "không thể truy cập trường hợp khác".

+2

Cảm ơn ... Trong 5 năm tôi đã lập trình C#, tôi chưa bao giờ để ý đến điều này. Tôi đoán từ thời gian tôi đã học được các biến tố truy cập của C#, tôi đã nhầm nó là riêng tư đối với cá thể đó. Bây giờ tôi cảm thấy như một kẻ ngốc. Ya học điều gì đó mỗi ngày! – Thelonias

+0

@ Ryan, tôi biết ý của bạn là gì ... Tôi đoán đây là một trong những điều bạn có thể "hiểu lầm" trong một thời gian dài. Và về cơ bản nó hoạt động giống như bạn nghĩ, cho đến khi bạn thực sự * thử * để truy cập vào thành viên riêng của một cá thể khác và nhận ra rằng nó được cho phép :) – Astrotrain

6

private phạm vi được giới hạn ở những lớp, không phải là dụ theo quy định tại C# spec:

1.6.2 Khả năng tiếp cận Mỗi thành viên của một lớp có khả năng tiếp cận liên quan, kiểm soát các vùng của văn bản chương trình có thể truy cập thành viên. Có là năm hình thức khả năng truy cập. Chúng được tóm tắt trong bảng sau .

 
Accessibility  Meaning 

public    Access not limited 
protected   Access limited to this class or classes derived from this class 
internal   Access limited to this program 
protected internal Access limited to this program or classes derived from this class  
private    Access limited to this class 
1

Một modifier truy cập có liên quan đến nó thực hiện lớp/gõ không với các trường hợp mà lớp