Classes & Objects
Simple Class with Constructor
public class Person
{
public string Name {get, private set};
public int Age {get, private set};
// Einfacher Konstruktor
public Person(string name, int age)
{
Name = name;
Age = age;
}
public void Greet()
{
Console.WriteLine($"Hallo, mein Name ist {Name} " +
$"und ich bin {Age} Jahre alt.");
}
}
class Program
{
static void Main()
{
Person p = new Person("Max", 30);
p.Greet();
}
}
Person Class with Full Name Property
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName =>
$"{FirstName ?? "Unknown"} {LastName ?? "Unknown"}";
}
Explizite Getter und Setter
public class Person
{
private string name;
// Getter-Methode
public string GetName()
{
return name;
}
// Setter-Methode
public void SetName(string value)
{
// Hier könnte man auch Validierungen einbauen
name = value;
}
}
// Nutzung:
var person = new Person();
person.SetName("Max");
Console.WriteLine(person.GetName()); // Ausgabe: Max
Getter & Setter (Lambda Schreibweise)
public class Person
{
private string _name;
private int _age;
public void GetAge() => _age;
public void SetAge(int age) => this.age = age >= 0 && age <= 150 ? age : -1;
public void GetName => _name;
public void SetName(string name) => this.name = name.IsNullOrEmpty ?
name : "Invalid name";
}
Properties (ausführliche Schreibweise)
Properties kapseln intern oft ein privates Feld (Backing Field) und bieten einen direkten Zugriff über eine kompakte Syntax.
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; } // Hier können auch Prüfungen eingebaut werden
}
}
// Nutzung:
var person = new Person();
person.Name = "Max";
Console.WriteLine(person.Name); // Ausgabe: Max
Expression-bodied Properties
public class Papier
{
private double _laenge;
private double _breite;
public double Laenge
{
get => _laenge;
set => _laenge = value;
}
public double Breite
{
get => _breite;
set => _breite = value;
}
}
Properties (Auto-Properties)
Bei Auto-Properties übernimmt der Compiler die Erstellung eines versteckten Backing Fields
public class Person
{
public string Name { get; set; }
}
// Nutzung:
var person = new Person { Name = "Max" }; Console.WriteLine(person.Name);
// Ausgabe: Max
Konstruktor mit Überladung
// man kann mehrere Konstruktoren mit verschiedenen Parametern
// definieren (Konstruktor Überladung)
class Person {
public string Name;
public int Age;
// Konstruktor 1
public Person(string name, int age) {
Name = name;
Age = age;
}
// Konstruktor 2 (Standardwerte)
public Person() {
Name = "Unbekannt";
Age = 0;
}
}
class Program {
static void Main() {
Person p1 = new Person("Anna", 25);
Person p2 = new Person(); // Standardwerte werden gesetzt
Console.WriteLine($"{p1.Name}, {p1.Age} Jahre");
Console.WriteLine($"{p2.Name}, {p2.Age} Jahre");
}
}
Konstruktor Aufruf mit this
class Beispiel
{
// Konstruktor ohne Parameter, der den anderen Konstruktor
// mit this(..., ...) aufruft
public Beispiel() : this("Heute ist der ", DateTime.Today)
{
}
// Konstruktor mit zwei Parametern
public Beispiel(string text, DateTime datum)
{
Console.WriteLine(text + datum.ToShortDateString());
}
// Hauptmethode
public static void Main(string[] args)
{
Beispiel beispiel1 = new Beispiel("Morgen ist der ", DateTime.Today.AddDays(1));
// Aufruf des ersten Konstruktors
// Ausgabe: Morgen ist der {dd.MM.yyyy}
Beispiel beispiel2 = new Beispiel();
// Aufruf des zweiten Konstruktors
// Ausgabe: Heute ist der {dd.MM.yyyy}
}
}
Method Overriding
Provides a new version of a method inherited from a parent class. Inherited method must be: virutal, abstract or already overriden.
class Animal
{
public virtual void Speak()
{
Console.WriteLine("The animal goes *brrr*")
}
}
class Dog : Animal
{
public override void Speak()
{
Console.WriteLine("The dog goes *wooff*")
}
}
String Representation with ToString
public override string ToString()
{
return "Hello my name is " + this.name + " and I am " + this.age
+ " years old.";
}
// Aufruf in Main
var aPerson = new Person("Horst", 45);
Console.WriteLine(aPerson);
// output: Hello my name is Horst and I am 45 years old.
Override Equals
class Person
{
public string Name { get; set; }
public int Age { get; set; }
public override bool Equals(object obj)
{
if (obj is Person)
{
Person person = obj as Person;
return Name.Equals(person.Name) && Age == person.Age;
}
return false;
}
}
stativ void Main()
{
Person person = new Person { "Harry", 25 };
Person test = new Person { "Harry", 25 };
if (person.Equals(test))
Console.WriteLine("Same");
else
Console.WriteLine("Not the same");
}