• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Jak lepiej przypisywać wartości do właściwości w konstruktorze

VPS Starter Arubacloud
0 głosów
248 wizyt
pytanie zadane 12 marca 2016 w C# przez Szepard Nowicjusz (120 p.)

Hej, od jakiegoś czasu praktykuję C# i zaczynam dbać o jakość swojego kodu, stąd moje pytanie. Lepiej w konstruktorze przypisać wartości z metod zwracających obliczoną wartość, czy wywołać metodę i to w niej przypisać wartość. Dwa przykłady poniżej.

Wariant 1

public class Kwadrat
{
    public string Nazwa { get; set; }
    public double Pole { get; set; }

    public Kwadrat(string nazwa)
    {
        Nazwa = nazwa;
        Pole = ObliczPole();
    }

    private double ObliczPole()
    {
        ...
        return wartosc;
    }
}

Wariant 2

public class Kwadrat
{
    public string Nazwa { get; set; }
    public double Pole { get; set; }

    public Kwadrat(string nazwa)
    {
        Nazwa = nazwa;
        ObliczPole();
    }

    private void ObliczPole()
    {
        ...
        Pole = wartosc;
    }
}

 

3 odpowiedzi

+1 głos
odpowiedź 17 października 2019 przez Crash182 Gaduła (3,600 p.)
Witaj. Generalnie to zależy od kontekstu i co tak naprawdę chcesz osiągnąć. Ja na przykład skłonny byłbym do dodania w konstruktorze długość boku, zwalidowal tę wartość i na jej podstawie automatycznie obliczyl pole. A czy użyjesz do tego jakiejś prywatnej metody czy nie to już zależy od ciebie. Wiadomo że trochę bardziej skomplikowane obliczenia warto byłoby opakowac w metodę... Jeśli chodzi o te warianty które przedstawiles, to obydwa są poprawne ale mają raczej sens tylko wtedy gdy ustawisz temu propsowi Pole, private albo protected set. Pozdrawiam
0 głosów
odpowiedź 17 października 2019 przez Siemił Mądrala (7,380 p.)
Pamiętaj że właściwość przez kompilator później i tak jest dzielony na dwie metody. Dlatego też walidacja może być umieszczana w 'set'.
0 głosów
odpowiedź 17 października 2019 przez Velta Maniak (52,750 p.)

Uważam, że taki void jest bez sensu, bo i tak przypisujesz wartość, tylko w innym miejscu.

Wolałbym rozwiązanie na podobieństwo tego:

using System;

namespace SomeNamespace
{
    public static class SquareAreaCalculator
    {
        public static double CalculateArea(double a)
        {
            return Math.Pow(a, 2);
        }
    }
}
namespace SomeNamespace
{
    public class Square
    {
        public string Name { get; set; }
        public double Area { get; set; }
    
        public Square(string name, double a)
        {
            Name = name;
            Area = SquareAreaCalculator.CalculateArea(a);
        }
    }
}

Ewentualnie – już przy tworzeniu obiektu po prostu obliczyć pole.

Podobne pytania

0 głosów
6 odpowiedzi 309 wizyt
pytanie zadane 23 marca 2016 w C# przez Vento Pasjonat (17,120 p.)
0 głosów
2 odpowiedzi 182 wizyt
pytanie zadane 22 maja 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 227 wizyt

93,022 zapytań

141,986 odpowiedzi

321,288 komentarzy

62,367 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...