[c#] Po co akcesory?

2011-10-12 22:14
sdadasasdasad
0

class Przykład
{
    private int m_Zmienna;

    public int Zmienna
    {
        set { m_Zmienna = value; }
        get { return m_Zmienna; }
    }
}

Jaki jest sens istnienia takiego akcesora, bo ja żadnego nie widzę. Czy nie lepiej w takim przypadku po prostu stworzyć bezpośrednio public int Zmienna? Druga sprawa czy jeżeli mamy akcesor, to czy korzystamy z:

 class Przykład
{
    private int m_Zmienna;

    public int Zmienna
    {
        set { m_Zmienna = value; }
        get { return m_Zmienna; }
    }

    public void ZrobCos()
    {
        m_Zmienna = 7;
    }

    public void ZrobCosJeszcze()
    {
        Zmienna = 77;
    }
}

Tak jak w ZróbCoś, czy jak w drugiej metodzie? W moim odczuciu skoro mamy akcesor to powinniśmy z niego korzystać, bo przecież w przyszłości możemy dodać warunek że:

set { if ( value < 0 ) m_Zmienna = 0; }

Czy coś w ten deseń. Jak Wy zapatrujecie się na to zagadnienie? Według mnie tworzenie (swoją drogą zbędnego) akcesora i niekorzystanie z niego ("bo mamy dostęp do m_Zmienna") jest co najmniej nielogiczne. Tak mnie dręczy po przejrzeniu kodu kolegi.

Pozostało 580 znaków

2011-10-12 22:18
0

A co jeśli np. m_Zmienna ma przyjmować wartości tylko z zakresu \left&lt;-\pi;\pi\right)? Wtedy właśnie do akcji wkraczają akcesory. Ich zadaniem jest sprawdzenie czy przypisana zmienna ma poprawną wartość już w momencie przypisania.


Pozostało 580 znaków

2011-10-12 22:35
sdadasasdasad
0

Rozumiem to ale widząc kod w którym autor odwołuje się bezpośrednio do m_Zmienna, to nabrałem wątpliwości i dlatego żeby upewnić się że to niepoprawne ten temat.

Pozostało 580 znaków

2011-10-12 23:34
0

Najlepiej pisać w C# 3.0 i tworzyć proste właściwości w skróconej formie (bez pól) i nie zastanawiać się nad tym.
A na pytanie "a po co są właściwości?" odpowiada się pytaniem: "a po co są funkcje?".


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
Pokaż pozostałe 4 komentarze
Pewnie dlatego, że ludzie nie znają "trików" typu this.dupa = dupa. - Wibowit 2011-10-13 03:02
Jak się rozwija projekt, który ma już X lat, to chyba bez sensu jest nagle z notacji węgierskiej rezygnować. Co innego projekt nowy. Mówię oczywiście o C/C++, żeby nie było. - stfu 2011-10-13 15:08
@Wibowit - chyba masz rację... Chociaż ja jak nie znałem tego triku, to używałem po prostu '_' w nazwie argumentu. @stfu - serio w C/C++ aż tak trudno zmienić nazwy pól? - somekind 2011-10-13 15:31
Jak sobie wyobrażasz zmianę nazwy pól w projekcie, który ma lekko milion linii kodu (i ciągle idą nowe) w Visualu C++ 6, na przykład? :) - stfu 2011-10-13 18:10
No cóż, w VS i C# to parę kliknięć myszy. :) A w C++ pewno parę lat czekania, zwłaszcza jeśli używa się pól publicznych... - somekind 2011-10-13 18:20

Pozostało 580 znaków

2011-10-13 07:54
0

Gdy pewnego dnia stwierdzisz, że pole danej klasy jednak musi być większe od 0, to nie trzeba będzie zmieniać i szukać po całym kodzie, tylko dodajesz sprawdzanie w set{} i po sprawie ;]. Ja mam publiczne wyłącznie właściwości, a to z dość dziwnego powodu, że Microsoft przyjął taką konwencję w swoich bibliotekach i jakoś pole w podpowiedziach intelisense mi "brzydko wygląda" ;)

edytowany 1x, ostatnio: Sarrus, 2011-10-13 07:54

Pozostało 580 znaków

2011-10-13 10:00
0

właściwości (a nie pola) są też potrzebne tam, gdzie środowisko IDE dokonuje jakiejś automatyzacji, np. przy tworzeniu usług WCF. z jakiegoś powodu działają tylko właściwości, pola nie.

Pozostało 580 znaków

2011-10-13 15:23
1

IMHO prefiks m_ słabo wygląda. Ja bym dał:

private int m_prefixbegin__private_int_in_class_Przyklad_project_Testowy666_used_for_storing_some_type_of_values__prefixend___variablenamebegin_nazwaZmiennej_variablenameend;

Od razu czytelniej wygląda, i nawet nie trzeba IntelliSense używać. I jest się zgodnym z zasadą mówiącą o tym, że nazwy zmiennych powinny się same komentować. No i jest węgierska bardziej niż Balaton wypełniony po brzegi gulaszem i leczo.


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 2x, ostatnio: somekind, 2011-10-13 15:24

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0