2013-08-16 18 views
6

Czy w przypadku odwoływania się do wartości wewnątrz klasy (z tej samej klasy) należy użyć pola lub właściwości, do której można uzyskać dostęp z innych klas?C# Użyj pola lub właściwości wewnątrz tej samej klasy

Na przykład, w jaki sposób powinienem odnosić się do zmiennej w mojej klasie i dlaczego?

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

}

Dzięki

+0

możliwy duplikat [Poprawne użycie pól, które są enkapsulowane we właściwościach w klasie] (http://stackoverflow.com/questions/10243851/correct-use-of-fields-that-are-encappulated-in-properties -inside-a-class) –

+0

możliwy duplikat [powinien odnosić się do właściwości lub zmiennej członkowskiej wewnątrz klasy?] (http://stackoverflow.com/questions/14486101/should-you-reference-the-property-or -the-member-variable-inside-a-class) –

+0

możliwy duplikat [Czy chcesz uzyskać dostęp do zmiennej w obrębie tej samej klasy za pośrednictwem Property?] (http://stackoverflow.com/questions/271318/should-you-access -a-variable-within-the-same-class-via-a-property) –

Odpowiedz

1

Prawdopodobnie nie ma różnicy w końcu, ponieważ jitter bez wątpienia inline wywołanie funkcji, które są generowane podczas korzystania z własności .. do bezpośredniego dostępu do pola .

Osobiście (oraz w zespołach, w których byłem, w tym bieżący), używamy pola i opuszczamy nieruchomości, aby uzyskać dostęp poza klasą .. chyba że są to właściwości automatyczne (co, o dziwo, zdarza się rzadko nam) lub zawierają logikę.

4

Kiedy jest to proste nieruchomość w ten sposób, należy rozważyć zastąpienie go z „automatycznym” własności, podobnie jak to:

public static int NumberOfEvents {get;set;} 

o właściwościach to proste, to nie ma znaczenia, w jaki sposób możesz uzyskać do nich dostęp: mimo dostępu Zmienna backing może wydawać się trochę szybsza, optymalizator zadba o optymalizację wywołania funkcji, dzięki czemu oba wejścia będą równie szybkie.

Gdy właściwość jest bardziej złożona, na przykład, gdy ma dodatkowe walidacje i/lub wyzwala zdarzenia, decyzja staje się bardziej złożona: musisz zdecydować, czy chcesz uzyskać efekty związane z dostępem do nieruchomości, czy też chcesz ich uniknąć. Następnie podejmujesz decyzję na podstawie tego, co chcesz osiągnąć.

Powiązane problemy