C#-Structs verstehen: Definition, Verwendung und wesentliche Unterschiede
C#-Structs
Lernen Sie, wie Sie C#-Structs definieren, instanziieren und damit arbeiten – einschließlich Konstruktoren, Eigenschaften und ihren wesentlichen Unterschieden zu Klassen.
In C# funktioniert ein Struct (Struktur) ähnlich wie eine Klasse, ist aber ein Werttyp, was bedeutet, dass es Daten direkt speichert statt einer Referenz.
Angenommen, wir möchten Name und Alter einer Person speichern. Wir könnten zwei Variablen erstellen: name und age und Werte zuweisen.
Wenn wir diese Informationen jedoch für mehrere Personen benötigen, wird das Deklarieren separater Variablen mühsam. Ein Struct, das name und age enthält, lässt uns dasselbe Layout für jede Person wiederverwenden.
Struct in C# definieren
In C# verwenden wir das struct-Schlüsselwort, um ein Struct zu deklarieren. Zum Beispiel:
struct Employee
{
public int id;
}
Hier ist id ein Feld innerhalb des Structs. Ein Struct kann auch Methoden, Indexer und mehr enthalten.
Struct-Variable deklarieren
Bevor Sie ein Struct verwenden, müssen Sie eine Struct-Variable erstellen. Die Syntax lautet:
struct Employee
{
public int id;
}
// emp vom Typ Employee deklarieren
Employee emp;
Im Beispiel haben wir ein Struct namens Employee definiert und eine Variable emp dieses Typs deklariert.
Auf C#-Struct zugreifen
Auf Struct-Mitglieder zugreifen Sie mit dem Punktoperator (.):
Employee emp;
emp.id = 1;
Dies weist den Wert 1 dem id-Feld des Employee-Structs zu.
Hinweis: Primitive Typen wie int, bool und float sind in C# vordefinierte Structs.
Beispiel: C#-Struct
using System;
namespace CsharpStruct
{
// Struct definieren
struct Employee
{
public int id;
public void getId(int id)
{
Console.WriteLine("Mitarbeiter-ID: " + id);
}
}
class Program
{
static void Main(string[] args)
{
// emp vom Typ Employee deklarieren
Employee emp;
// Struct-Feld zugreifen und setzen
emp.id = 1;
// Struct-Methode aufrufen
emp.getId(emp.id);
Console.ReadLine();
}
}
}
Ausgabe
Mitarbeiter-ID: 1
Das Programm erstellt ein Employee-Struct, setzt sein id-Feld und ruft die getId-Methode auf, um es anzuzeigen.
Sie können ein Struct auch mit dem new-Schlüsselwort instanziieren:
Employee emp = new Employee();
Dies ruft den parameterlosen Konstruktor auf und initialisiert alle Felder mit ihren Standardwerten.
Konstruktoren in C#-Structs
Structs können Konstruktoren definieren, um Felder zu initialisieren. Beispiel:
struct Employee
{
public int id;
// Konstruktor
public Employee(int employeeId)
{
id = employeeId;
}
}
Hinweis: Vor C# 10 konnten Structs keine parameterlosen Konstruktoren enthalten.
Beispiel: Konstruktor in C#-Structs
using System;
namespace CsharpStruct
{
// Struct definieren
struct Employee
{
public int id;
public string name;
// Parameterisierter Konstruktor
public Employee(int employeeId, string employeeName)
{
id = employeeId;
name = employeeName;
}
}
class Program
{
static void Main(string[] args)
{
// Konstruktor des Structs aufrufen
Employee emp = new Employee(1, "Brian");
Console.WriteLine("Mitarbeitername: " + emp.name);
Console.WriteLine("Mitarbeiter-ID: " + emp.id);
Console.ReadLine();
}
}
}
Ausgabe
Mitarbeitername: Brian Mitarbeiter-ID: 1
In diesem Beispiel weist der Konstruktor Werte allen Feldern zu. Das Versäumnis, jedes Feld zu initialisieren, führt zu einem Kompilierfehler.
Eigenschaften in C#-Structs
Structs können Eigenschaften für Kapselung bereitstellen. Beispiel:
using System;
namespace CsharpStruct
{
// Struct definieren
struct Employee
{
public int id;
// Eigenschaft erstellen
public int Id
{
get { return id; }
set { id = value; }
}
}
class Program
{
static void Main(string[] args)
{
Employee emp = new Employee();
emp.Id = 1;
Console.WriteLine("Mitarbeiter-ID: " + emp.Id);
Console.ReadLine();
}
}
}
Ausgabe
Mitarbeiter-ID: 1
Hier bietet die Id-Eigenschaft kontrollierten Zugriff auf das id-Feld.
Unterschied zwischen Klasse und Struct in C#
Obwohl Klassen und Structs eine ähnliche Syntax teilen, unterscheiden sie sich grundlegend:
- Eine Klasse ist ein Referenztyp; ein Struct ist ein Werttyp.
- Das Zuweisen einer Klasseninstanz kopiert eine Referenz, sodass zwei Variablen auf dasselbe Objekt zeigen. Das Zuweisen eines Structs kopiert den gesamten Wert.
- Structs unterstützen keine Vererbung, Klassen schon.
Beispiel für Klassen-Referenzverhalten:
using System;
namespace CsharpStruct
{
class Employee
{
public string name;
}
class Program
{
static void Main(string[] args)
{
Employee emp1 = new Employee();
emp1.name = "John";
Employee emp2 = emp1;
emp2.name = "Ed";
Console.WriteLine("Mitarbeiter1 Name: " + emp1.name);
Console.ReadLine();
}
}
}
Ausgabe
Mitarbeiter1 Name: Ed
Beispiel für Struct-Wertverhalten:
using System;
namespace CsharpStruct
{
struct Employee
{
public string name;
}
class Program
{
static void Main(string[] args)
{
Employee emp1 = new Employee();
emp1.name = "John";
Employee emp2 = emp1;
emp2.name = "Ed";
Console.WriteLine("Mitarbeiter1 Name: " + emp1.name);
Console.ReadLine();
}
}
}
Ausgabe
Mitarbeiter1 Name: John
Im Struct-Beispiel erhält emp2 eine Kopie von emp1, sodass Änderungen an emp2 emp1 nicht beeinflussen.
Diese Unterschiede machen Structs ideal für kleine, unveränderliche Datenstrukturen, die von Stapelallokation und Wertsemantik profitieren.
C Sprache
- C-Structs meistern: Definition, Variablen, Zugriff & fortgeschrittene Beispiele
- C-Structs und Zeiger meistern: Praxisleitfaden
- C-Structs: Übergeben, Zurückgeben & Referenz-Handling meistern
- Zukunft der Arbeit meistern: Strategien, um Wettbewerb zu schlagen
- C++ Structs erklärt mit praktischem Beispiel
- Modernes Mitarbeiter-Scheduling: Der Fall für Digitalisierung zur Steigerung von Retention und Produktivität
- Arbeitssicherheit erhöhen: Warum regelmäßige Mitarbeiter-Nachprüfungen entscheidend sind
- 4 bewährte Strategien zur Stärkung der Mitarbeiterbindung während COVID-19
- DVIRC befördert Alan Shell zum Director Lean/CI Services, begrüßt drei Neuzugänge
- Mitarbeiter-Produktivitätsanalytik: Insights im IoT-Zeitalter freisetzen