Właściwości, modyfikacja poprzez pola - pytanie

0

Cześć wszystkim. Czy modyfikacja wartości pól obiektu w stylu pkt.x = np. 50 jest poprawną praktyką?

    public struct Punkt
    {
        private int _x;
        private int _y;

        public Punkt(int x, int y)
        {
            _x = x;
            _y = y;
        }

        public int x
        {
            get
            {
                return _x;
            }
            set
            {
                _x = value;
            }
        }

        public int y
        {
            get
            {
                return _y;
            }
            set
            {
                _y = value;
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Punkt pkt = new Punkt(20, 30);
            Console.WriteLine(pkt.x);
            pkt.x = 50;
            Console.WriteLine(pkt.x);
        }
    }
1

Jest, ponieważ często bywa tak, że nie wszystkie dane są dostępne podczas konstrukcji obiektu.

0

Ale aby w pełni korzystać z dobrych praktyk OOP lepszym rozwiązaniem byłoby ustawienie prywatnego settera dla X i utworzenie metody SetX(int x), która to wewnętrznie w obiekcie ustawi i zabezpieczy np przed tym, aby obiekt był zawsze w poprawnym stanie (np sprawdził czy zmienna x nie jest ujemna).

2

@XardasLord: Jakby setter nie mógł tego zrobić.

1
grzesiek51114 napisał(a):

@XardasLord: Jakby setter nie mógł tego zrobić.

oby tylko setter pod spodem nie pobierał pół internetu i strzelał do 50 baz

0
WeiXiao napisał(a):
grzesiek51114 napisał(a):

@XardasLord: Jakby setter nie mógł tego zrobić.

oby tylko setter pod spodem nie pobierał pół internetu i strzelał do 50 baz

Dokładnie :) @grzesiek51114 ogólnie przykład który został podany w zupełności można obsłużyć przez pole i settera i na potrzeby tego przykładu jest to wystarczające. Ale już jakaś bardziej złożona logika to lepiej mieć właściwości i obsługę zmiany stanu obiektu realizować przez metody.

2

Dobra praktyką jest używanie automatycznych właściwości tam gdzie jest to możliwe i nieużywanie struct tam gdzie nie jest to konieczne. Poza tym dobre praktyki mają to do siebie, że sens ich stosowania widać na kodzie, który coś robi i jest dłuższy niż parę linii, klasa Punkt nie spełnia tych wymagań.

0

@WeiXiao: @XardasLord co Wy chcecie walidowac pobieraniem połowy internetu w klasie Punkt? To nowa forma trollingu?

1

@Saalin:

za to ignorowanie kontekstu to stara forma trollingu :D

Ja odnosiłem się do @grzesiek51114 który odnosił się do @XardasLord który pisał ogólnie o OOP.

2

@Saalin: Akurat tutaj struct idealnie pasuje.

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