Przypisanie wartości z konstruktora do właściwości

0

Mam w klasie utworzyć konstruktor wymagający argumentu:
(string imięNazwisko - zapisujemy wartość jako właściwość ImięNazwisko)

I nie bardzo rozumiem jak mam przypisać te wartość do właściwości ImięNazwisko która ma robić co innego w getterze:
string ImięNazwisko - przy odczycie skleja imię i nazwisko z użyciem spacji;

 class Osoba
    {
        string imię;
        public string Nazwisko;
        



        public string Imie
        {
            get { return imię; }
            set {
                if (string.IsNullOrEmpty(value))
                {
                    throw new Exception("Imię jest puste");

                }
                else
                {
                    imię = value;
                }
            }

        }

        public string ImieNazwisko
        {
            get { return Imie + " " + Nazwisko; }
            set
            {
                
            }
        }



        public Osoba(string imięNazwisko)
        {
            this.ImieNazwisko = imięNazwisko;
        }
2

No skoro getter skleja po spacji to setter powinien... roz.. roz..?
Ale to dziwny pomysł, ImieNazwisko powinno być w tym przypadku raczej get only. Kto tak kazał robić?

0

@obscurity: No tak ma być finalnie ale na tym sie zatrzymałem, zadanie na studia nie chce całego wrzucać ale tak poglądowo ma byc :

  • string Imię - przy zapisie sprawdza, czy value nie jest puste i zwraca w takim wypadku wyjątek
  • string ImięNazwisko - przy odczycie skleja imię i nazwisko z użyciem spacji; przy zapisie rozbija napis względem spacji i traktuje pierwszą składową jako Imię, a ostatnią jako Nazwisko; w wypadku jednoczłonowego value ustawia puste Nazwisko;
  • string imięNazwisko - zapisujemy wartość jako właściwość ImięNazwisko
1

No to w treści zadania masz dokładnie napisane co masz zrobić
Proszę: https://www.google.com/search?q=c%23+rozbicie+stringa

0

@obscurity:

public string ImieNazwisko
        {
            get { return Imie + " " + Nazwisko; }
            set
            {
                string[] rozbicie = value.Split(' ');
                imię = rozbicie[0];
                if (rozbicie.Length > 1)
                    Nazwisko = rozbicie[^1];
                else
                    Nazwisko = "";
            }
        }

W ten sposób? Chyba rozumiem, value w tym przypadku to będzie wartość z konstruktora?

1

Tak, value w set to zawsze jest wartość, którą przypisujesz do zmiennej.

1
class Person
{
  private string _name;
  private string _surname;
  public string name
  {
    get { return _name; }
    set
    {
      if(string.IsNullOrEmpty(value.trim())) throw new Exception("Imię jest puste");
      else _name=value.trim();
    }
  }

  public string surname
  {
    get { return _surname; }
    set
    {
      if(string.IsNullOrEmpty(value.trim())) throw new Exception("Nazwisko jest puste");
      else _surname=value.trim();
    }
  }
  
  public string NameAndSurname
  {
    get { return _name+" "+_surname; }
    set //nie jestem przekonany do takich tryków.
    {
      string[] splited=value.Split(" \t".ToCharArray());
      if(splited.length!=2) throw new Exception("Imie lub Nazwisko jest puste");
      name=splited[0];
      surname=splited[1];      
    }
  }

  public Osoba(string name,string surname)
  {
    this.name=name;
    this.surname=surname;
  }
1

"Janusz Korwin Mikke" (nie żebym popierał, ale do testowania to się przynajmniej nadaje ) "Jan Maria Rokita" Ma dawać dalej ?

obscurity napisał(a):

Ale to dziwny pomysł, ImieNazwisko powinno być w tym przypadku raczej get only. Kto tak kazał robić?

+1

Podobnie jak jedno pole "Adres", zwłaszcza u geniuszy excella.

MSZ zdaniem dydaktyka powinna uczyć myśleć bardziej niż stawiać robaczki kodu, ale tu nakazuje "wyłącz myślenie, koduj"

1
ZrobieDobrze napisał(a):

Podobnie jak jedno pole "Adres", zwłaszcza u geniuszy excella.

Geniusze od baz danych tworzą lepsze numery:

Imie			Drugie_Imie		Nazwisko
Piotr			Andrzej			Kowalski
Piotr Andrzej					Kowalski
Piotr Andrzej	null			Kowalski

Nie wspominając już o różnej ilości spacji/twardych spacji pomiędzy Piotr a Andrzej, oraz na początku i na końcu każdego z wyrazów.
Z tym że poprawnie rozpisanego na pola Piotr Andrzej Kowalski mogę mieć tylko jednego, kiedy w pracy mamy takich dwóch.

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