C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



C#.NET / Objekt-Orientierte Programmierung mit C#.NET / C#.NET Die Klasse Mensch

C#.NET Die Klasse Mensch

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.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/cs_OOP_Mensch.html