• 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

Object Storage Arubacloud
0 głosów
226 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,010 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 261 wizyt
pytanie zadane 23 marca 2016 w C# przez Vento Pasjonat (17,120 p.)
0 głosów
2 odpowiedzi 156 wizyt
pytanie zadane 22 maja 2016 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 206 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...