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 / class vs struct

class vs struct

class vs struct

Unterschiede zwischen class und struct:

Die class

Die struct:


public struct sPerson 
{
    private string _Nachname;
    private string _Vorname;
    private int _Alter;
    private bool _IstWeiblich;
    /// <summary>Property Vorname</summary>
    public string Vorname
    {
        get => _Vorname;
        set => _Vorname = value.ToUpper();
    }
    /// <summary>Perperty Alter</summary>
    public int Alter
    {
        get => _Alter;
        set => _Alter = Math.Abs(value);            
    }
    /// <summary>
    /// Property IstWeiblich
    /// </summary>
    public bool IstWeiblich
    {
        get => _IstWeiblich;
        set => _IstWeiblich = value;            
    }
    /// <summary>
    /// Property Nachname
    /// </summary>
    public string Nachname
    {
        get => _Nachname;
        set =>  _Nachname = value.ToUpper();            
    }
    /// <summary>ParametrisierterKonstruktor des struct sPerson</summary>
    /// <param name="nn">wird _Nachname direkt zugewiesen</param>
    /// <param name="vn">wird _Vorname direkt zugewiesen</param>
    /// <param name="a">wird _Alter direkt zugewiesen</param>
    /// <param name="b">wird _IstWeiblich direkt zugewiesen</param>
    public sPerson(string nn, string vn, int a, bool b)
    {
        _Nachname = nn;
        _Vorname = vn;
        _Alter = a;
        _IstWeiblich = b;
    }
    /// <summary>ParametrisierterKonstruktor des struct sPerson</summary>
    /// <remarks>Standardsetzung fuer _Alter: 0</remarks>
    /// <param name="nn">wird _Nachname direkt zugewiesen</param>
    /// <param name="vn">wird _Vorname direkt zugewiesen</param>        
    /// <param name="b">wird _IstWeiblich direkt zugewiesen</param>
    public sPerson(string nn, string vn, bool b)
    {
        _Nachname = nn;
        _Vorname = vn;
        _Alter = 0;
        _IstWeiblich = b;
    }
    /// <summary>ParametrisierterKonstruktor des struct sPerson</summary>
    /// <param name="allinfos">wird per Split (|) aufgeteilt 
    /// und den einzelnen Feldern direkt zugewiesen</param>
    public sPerson(string allinfos)
    {
        _Nachname = allinfos.Split('|')[0];
        _Vorname = allinfos.Split('|')[1];
        _Alter = Convert.ToInt32(allinfos.Split('|')[2]);
        _IstWeiblich = Convert.ToBoolean(allinfos.Split('|')[3]);
    }
    public override string ToString()
    {
        string mw = "";
        if (_IstWeiblich) mw = "Frau";
        else mw = "Herr";
        return $"{mw} {Vorname} {Nachname} ist {Alter} Jahre alt";
    }
    public string ToXMLString()
    {
        return $"<sPerson><vn>{Vorname}</vn><nn>{Nachname}</nn></sPerson>";
    }
    public static List<sPerson> GetListe()
    {
        List<sPerson> personen = new List<sPerson>
        {
            new sPerson("Sinnlos", "Sara", 22, true),
            new sPerson("Haltlos|Harry|34|false"),
            new sPerson("Ratlos|Rudi|22|false"),
            new sPerson("Rielos|Lotte|33|true"),
            new sPerson("Achtlos|Anton|44|false"),
            new sPerson("Türschlos|Theo|55|false"),
            new sPerson("Denzschlos|Resi|64|false")
        };
        return personen;
    }
}

Der Aufruf ist hier möglich durch:


foreach (sPerson p in sPerson.GetListe())
    Console.WriteLine(p);

LINQ und Lambda

... oder auch mithilfe des -Ausdrucks:


sPerson.GetListe().ForEach(p => Console.WriteLine(p));

In beiden Fällen finden Sie dieses Ergebnis:


Frau Sara Sinnlos ist 22 Jahre alt
Herr Harry Haltlos ist 34 Jahre alt
Herr Rudi Ratlos ist 22 Jahre alt
Frau Lotte Rielos ist 33 Jahre alt
Herr Anton Achtlos ist 44 Jahre alt
Herr Theo Türschlos ist 55 Jahre alt
Herr Resi Denzschlos ist 64 Jahre alt

Mithilfe von LINQ und Lambda können Sie das Ergebnis noch verfeinern: Angenommen, Sie suchen alle Personen, deren Alter < 40 ist.


sPerson.GetListe()
    .Where(y => y.Alter < 40)
    .ToList<sPerson>()
    .ForEach(p => Console.WriteLine(p));

Absteigend sortiert soll es auch noch sein? Kein Problem:


sPerson.GetListe()
    .Where(y => y.Alter < 40)
    .OrderByDescending(z => z.Alter)
    .ToList<sPerson>()
    .ForEach(p => Console.WriteLine(p));

Das Ergebnis ist dann:


Herr Harry Haltlos ist 34 Jahre alt
Frau Lotte Rielos ist 33 Jahre alt
Frau Sara Sinnlos ist 22 Jahre alt
Herr Rudi Ratlos ist 22 Jahre alt

wg / 4. 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_class_vs_Struct.html