C#.NET / Objekt-Orientierte Programmierung mit C#.NET / C#.NET Die Klasse Mensch
![]() |
![]() |
➪
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CSharpSchulung
{
/// <summary>
/// Die Klasse Mensch mit seinen private geschützten Feldern
/// _Vorname, _Nachname, _Alter wird implementiert
/// </summary>
public class Mensch
{
/// <summary>
/// Klassenvariable: wird bei Konstruktoraufruf verändert
/// </summary>
private static int Anzahl = 0;
/// <summary>
/// Klassenmethode
/// </summary>
/// <returns>Inhalt von der Klassenvariable Anzahl</returns>
public static int GetAnzahl()
{
return Anzahl;
}
/// <summary>
/// Klassenmethode: prüft, ob der Parameter
/// einem vordefinierten Pattern entspricht
/// </summary>
/// <param name="s"></param>
/// <returns></returns>
private static bool Matches(string s)
{
bool b = false;
//System.Text.RegularExpressions;
Regex r;
r = new Regex("^[A-Z]{1}[a-zäöü]{1,19}$");
if (r.IsMatch(s)) b = true;
return b;
}
#region private geschuetzte Felder
/// <summary>
/// private geschütztes Feld _Vorname, Typ: string
/// </summary>
private string _Vorname;
/// <summary>
/// private geschütztes Feld _Nachname, Typ: string
/// </summary>
private string _Nachname;
/// <summary>
/// private geschütztes Feld _Alter, Typ: int
/// </summary>
private int _Alter;
#endregion
/*Konstruktoren legen einen Speicherbereich
für ein Objekt einer Klasse an.
Sie haben keinen Rückgabewert, nicht einmal void.*/
#region Konstruktoren
/// <summary>
/// Standardkonstruktor der Klasse Mensch
/// </summary>
public Mensch()
{
Anzahl++;
//Console.WriteLine("Standardkonstruktor der Klasse Mensch");
}
/// <summary>
/// Parametrisierter Konstruktor der Klasse Mensch
/// </summary>
/// <param name="vn">wird _Vorname zugewiesen</param>
/// <param name="nn">wird _Nachname zugewiesen</param>
/// <param name="a">wird _Alter zugewiesen</param>
public Mensch(string vn, string nn, int a)
{
Anzahl++;
Vorname = vn;
Nachname = nn;
Alter = a;
}
/// <summary>
/// Kopierkonstruktor der Klasse Mensch
/// </summary>
/// <param name="m"></param>
public Mensch(Mensch m)
{
Anzahl++;
this.Vorname = m.Vorname;
this.Nachname = m.Nachname;
this.Alter = m.Alter;
}
/// <summary>
/// Destruktor der Klasse Mensch
/// </summary>
~Mensch()
{
Anzahl--;
//Console.WriteLine("Destruktor der Klasse Mensch");
}
#endregion
/*Legen Sie für jedes private geschützte Feld
jeweils
eine Lesemethode
und eine ein Schreibmethode an*/
#region Lese- und Schreibmethoden
/// <summary>
/// Schreibmethode für _Vorname
/// </summary>
/// <param name="vn">wird auf _Vorname kopiert</param>
public void SetVorname(string vn)
{
_Vorname = vn;
}
/// <summary>
/// Lesemethode für _Vorname
/// </summary>
/// <returns>_Vorname</returns>
public string GetVorname()
{
return _Vorname;
}
/// <summary>
/// Schreibmethode für _Nachname
/// </summary>
/// <param name="nn">wird auf _Nachname kopiert</param>
public void SetNachname(string nn)
{
_Nachname = nn;
}
/// <summary>
/// Lesemethode für _Nachname
/// </summary>
/// <returns>_Nachname</returns>
public string GetNachname()
{
return _Nachname;
}
/// <summary>
/// Schreibmethode für _Alter
/// </summary>
/// <param name="a">wird auf _Alter kopiert</param>
public void SetAlter(int a)
{
_Alter = Math.Abs(a);
}
/// <summary>
/// Lesemethode für _Alter
/// </summary>
/// <returns>_Alter</returns>
public int GetAlter()
{
return _Alter;
}
#endregion
#region Properties
/// <summary>
/// PROPERTY Vorname: kombinierte Lese- und Schreibmethode
/// </summary>
public string Vorname
{
// public void set_Vorname(string value)
set
{
if (Matches(value))
{
_Vorname = value;
}
else
{
throw new Exception();
}
}
// public string get_Vorname()
get
{
return _Vorname;
}
}
//Alternative:
// public string Vorname { get => _Vorname; set => _Vorname = value; }
// Alternative mit Regex-Prüfung
// public string Vorname
// {
// get => _Vorname;
// set => _Vorname = Regex.IsMatch(value, "^[A-Z]{1}[a-zäöü]{1,19}$") ?
// value : throw new Exception("Falscher Fehler");
// }
/// <summary>
/// PROPERTY Nachname: kombinierte Lese- und Schreibmethode
/// </summary>
public string Nachname
{
// public void set_Nachname(string value)
set
{
if (Matches(value))
{
_Nachname = value;
}
else
{
throw new Exception();
}
}
// public string get_Nachname()
get
{
return _Nachname;
}
}
//Alternative:
// public string Nachname
// {
// set => _Nachname = value;
// get =>_Nachname;
// }
// Alternative mit Regex-Prüfung
// public string Nachname
// {
// set => _Nachname
// = Regex.IsMatch(value, "^[A-Z]{1}[a-zäöü]{1,19}$")
// ? value
// : throw new Exception("Falscher Fehler");
// get => _Nachname;
// }
/// <summary>
/// PROPERTY Alter: kombinierte Lese- und Schreibmethode
/// </summary>
public int Alter
{
set
{
_Alter = Math.Abs(value);
}
get
{
return _Alter;
}
}
// Alternative:
// public int Alter { get => _Alter; set => _Alter = Math.Abs(value); }
#endregion
#region Methoden
/// <summary>
/// Überschreibt die ToString-Methode der Basisklasse Object
/// </summary>
/// <returns>Vorname Nachname ist Alter Jahre alt</returns>
public override string ToString()
{
return String.Format("{0} {1} ist {2} Jahre alt",
Vorname, Nachname, Alter);
}
// Alternative:
// public override string ToString () =>
// ($"{this.Vorname} {this.Nachname}
ist {this.Alter} Jahre alt.");
#endregion
}
}
Mensch m = new Mensch("Zenzi", "Zeitlos", 29);
Console.WriteLine(m);
//hier wird per Default die ToString()-Methode aufgerufen
Eine Alternative liegt in der Arbeit mit dem Objektinitialisierer. Hier wird der Standardkonstruktor aufgerufen, anschließend werden die Werte via Properties gesetzt.
var m = new Mensch { Vorname="Wilma", Nachname="Wunschlos", Alter=29 };
Console.WriteLine(m);
//hier wird per Default die ToString-Methode aufgerufen
wg / 5. April 2021
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de