2013-08-16 26 views
6

Khi đề cập đến một giá trị bên trong một lớp (từ trong cùng một lớp), bạn có nên sử dụng trường hoặc thuộc tính có thể được truy cập từ các lớp khác không?C# Sử dụng trường hoặc thuộc tính trong cùng một lớp

Ví dụ: tôi nên đề cập đến một biến nào trong lớp của mình và tại sao?

public static class Debug 
{ 
    private static int _NumberOfEvents = 1; 

    public static int NumberOfEvents 
    { 
    get 
    { 
     return _NumberOfEvents; 
    } 
    set 
    { 
     _NumberOfEvents = value; 
    } 
} 

public static void LogEvent(string Event) 
{ 
    //This way? 
    Console.WriteLine("Event {0}: " + Event, _NumberOfEvents); 
    _NumberOfEvents++; 

    //Or this way? 
    Console.WriteLine("Event {0}: " + Event, NumberOfEvents); 
    NumberOfEvents++; 
} 

}

Cảm ơn

+0

bản sao có thể có của [Sử dụng đúng các trường được đóng gói trong thuộc tính bên trong một lớp] (http://stackoverflow.com/questions/10243851/correct-use-of-fields-that-are-encapsulated-in-properties -inside-a-class) –

+0

bản sao có thể có của [Bạn có nên tham chiếu Thuộc tính hoặc Biến thành viên trong một lớp không?] (http://stackoverflow.com/questions/14486101/should-you-reference-the-property-or -e-member-variable-inside-a-class) –

+0

có thể trùng lặp của [Bạn có nên truy cập một biến trong cùng một lớp thông qua một thuộc tính không?] (http://stackoverflow.com/questions/271318/should-you-access -a-biến-trong-cùng-lớp-qua-một-tài sản) –

Trả lời

1

Có lẽ không có sự khác biệt cuối cùng, kể từ khi Jitter sẽ không nghi ngờ inline cuộc gọi chức năng được tạo ra khi sử dụng tài sản .. vào một truy cập trực tiếp lĩnh vực .

Cá nhân (và trong các nhóm mà tôi đã tham gia, bao gồm nhóm hiện tại), chúng tôi sử dụng trường và để lại các thuộc tính để truy cập bên ngoài lớp .. trừ khi chúng là các thuộc tính tự động (trong đó, đáng ngạc nhiên là đủ.) hoặc chúng chứa logic.

4

Khi nó là một tài sản đơn giản như thế này, hãy xem xét thay thế nó bằng một tài sản "tự động", như thế này:

public static int NumberOfEvents {get;set;} 

Với đặc tính này đơn giản, nó không quan trọng mà cách bạn truy cập chúng: mặc dù truy cập biến ủng hộ có thể có vẻ nhanh hơn một chút, trình tối ưu hóa sẽ chăm sóc tối ưu hóa cuộc gọi hàm, làm cho cả hai truy cập đều nhanh chóng.

Khi thuộc tính phức tạp hơn, ví dụ, khi có xác thực và/hoặc sự kiện kích hoạt bổ sung, quyết định trở nên phức tạp hơn: bạn cần quyết định xem bạn có muốn có hiệu ứng liên quan đến việc truy cập thuộc tính hay không bạn muốn tránh chúng. Sau đó, bạn đưa ra quyết định dựa trên những gì bạn muốn xảy ra.

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