Najważniejsze: programować po angielsku. Tutaj to zapewne zadanie od nauczyciela, więc... po prostu pomińmy to tym razem.
Pole dla numeru PESEL uczyniłbym ciągiem znaków: łatwiej z walidacją z wyrażeniami regularnymi, a poza tym maksymalny zakres typu Int32 to 2^31, czyli liczba 10-cyfrowa, a PESEL ma ich 11:
private string _Pesel { get; set; }
public string Pesel
{
get => _Pesel;
set
{
Regex regex = new(@"^\d{11}$");
if (!regex.IsMatch(value))
{
throw new ArgumentException("Wprowadzony numer PESEL jest nieprawidłowy.");
}
else
{
_Pesel = value;
}
}
}
Konstruktor z parametrami można skrócić:
public Uczen(string imie, string nazwisko, string pesel)
{
(Imie, Nazwisko, Pesel) = (imie, nazwisko, pesel);
}
Dodaj metodę publiczną void Wypisz() która wypisuje dane ucznia
Tutaj to – według zadania – musi zostać, ale znacznie lepiej byłoby po prostu przeciążyć metodę ToString, a dopiero z logiki głównej ją wywołać podczas wypisywania:
public override string ToString()
{
return $"Imie: {Imie}{Environment.NewLine}Nazwisko: {Nazwisko}{Environment.NewLine}PESEL: {Pesel}";
}
W przypadku wypisywania, warto użyć interpolacji, która tworzy jeden ciąg znaków (w .NET ciąg znaków jest niezmienny, a to oznacza, że przy każdej konkatenacji ciągów tworzony jest nowy, a nie dołączany do istniejącego):
public void Wypisz()
{
Console.WriteLine($"Imie: {Imie}{Environment.NewLine}Nazwisko: {Nazwisko}{Environment.NewLine}PESEL: {Pesel}";);
}
Zamiennie można skorzystać z metody String.Format albo klasy StringBuilder, ale powyższa interpolacja zdecydowanie spełnia swoją rolę w tym przypadku IMHO jest wygodniejszym podejściem do łączenia ciągów znaków.
Tworzenie obiektów pozostaw funkcji głównej programu (a teraz właściwie to plikowi Program.cs). Należy pamiętać, że z racji walidacji, warto byłoby skorzystać z konstrukcji try ... catch, jeżeli numer PESEL będzie niepoprawny:
[...]
Uczen uczen = default;
try
{
uczen = new(imie, nazwisko, pesel);
}
catch (ArgumentException ex)
{
Console.WriteLine($"Wystąpił problem z utworzeniem obiektu przechowującego informacje o uczniu:{Environment.NewLine}{ex.Message}");
}
EDIT #1: Poprawiono znak cudzysłowia dla wycinka logiki głównej.
EDIT #2: Zmodyfikowano informację o konkatenacji, zgodnie z dokumentacją metody String.Concat.