English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In C# ist Struct ein Werttyp-Datentyp, der Datenstrukturen darstellt. Er kann Parameterisierte Konstruktoren, statische Konstruktoren, Konstanten, Felder, Methoden, Eigenschaften, Indexer, Operatoren, Ereignisse und eingebettete Typen enthalten.
Struct kann verwendet werden, um kleine Datenwerte zu speichern, die keine Vererbung benötigen, wie z.B. Koordinatenpunkte, Schlüssel-Wert-Paare und komplexe Datenstrukturen.
Die Struktur wird mit dem Schlüsselwort struct angegeben. Der Standardmodifikator ist der interne Modifikator der Struktur und ihrer Mitglieder.
Im folgenden Beispiel wird die Struktur der Koordinatendiagramme deklariert.
struct Coordinate { public int x; public int y; {}
Wie bei Variablen von Basistypen kann ein Struct-Objekt mit oder ohne den Operator new erstellt werden.
struct Coordinate { public int x; public int y; {} Coordinate point = new Coordinate(); Console.WriteLine(point.x); //Ausgabe: 0 Console.WriteLine(point.y); //Ausgabe: 0
Oben wurde ein Objekt der Coordinate (Koordinate) -Struktur erstellt, indem das Schlüsselwort new verwendet wurde. Es ruft den Standard-Parameterlosen Konstruktor der Struktur auf, der alle Mitglieder auf den Standardwert des angegebenen Datentyps initialisiert.
Wenn eine Variable des Typs Struct deklariert wird, ohne das Schlüsselwort new zu verwenden, ruft sie keinen Konstruktor auf, daher bleiben alle Mitglieder im Zustand der nicht zugewiesenen Werte. Daher muss vor dem Zugriff auf jedes Mitglied ein Wert zugewiesen werden, andernfalls wird ein Kompilierungsfehler ausgelöst.
struct Coordinate { public int x; public int y; {} Coordinate point; Console.Write(point.x); // Kompilierungsfehler point.x = 10; point.y = 20; Console.Write(point.x); //Ausgabe:10 Console.Write(point.y); //Ausgabe:20
Ein Struct (Struktur) kann keinen Parameterlosen Konstruktor enthalten. Es kann nur einen parametrisierten Konstruktor oder einen statischen Konstruktor enthalten.
struct Coordinate { public int x; public int y; public Coordinate(int x, int y) { this.x = x; this.y = y; {} {} Coordinate point = new Coordinate(10, 20); Console.WriteLine(point.x); //Ausgabe:10 Console.WriteLine(point.y); //Ausgabe:20
Muss in dem parametrisierten Konstruktor alle Mitglieder der Struktur enthalten und ihnen zuweisen; andernfalls gibt der C#-Kompilator bei jedem nicht zugewiesenen Mitglied einen Kompilierungsfehler aus.
Ein Struct (Struktur) kann Eigenschaften, automatisch generierte Eigenschaften und Methoden enthalten, wie eine Klasse.
struct Coordinate { public int x { get; set; } public int y { get; set; } public void SetOrigin() { this.x = 0; this.y = 0; {} {} Coordinate point = Coordinate(); point.SetOrigin(); Console.WriteLine(point.x); //Ausgabe: 0 Console.WriteLine(point.y); //Ausgabe: 0
Der folgende Struct enthält statische Methoden.
struct Coordinate { public int x; public int y; public Coordinate(int x, int y) { this.x = x; this.y = y; {} public static Coordinate GetOrigin() { return new Coordinate(); {} {} Coordinate point = Coordinate.GetOrigin(); Console.WriteLine(point.x); //Ausgabe: 0 Console.WriteLine(point.y); //Ausgabe: 0
Strukturen können Ereignisbenachrichtigungen enthalten, um Abonnenten über bestimmte Aktionen zu informieren. Der folgende Struktur (struct) enthält ein Ereignis.
struct Coordinate { private int _x, _y; public int x { get{ return _x; {} set{ _x = value; CoordinatesChanged(_x); {} {} public int y { get{ return _y; {} set{ _y = value; CoordinatesChanged(_y); {} {} public event Action<int> CoordinatesChanged; {}
Der obige Struktur enthält das Ereignis coordinateChanged, das ausgelöst wird, wenn sich die x- oder y-Koordinaten ändern. Der folgende Beispiel zeigt, wie das Ereignis CoordinateChanged behandelt wird.
class Program { static void Main(string[] args) { Coordinate point = new Coordinate(); point.CoordinatesChanged += StructEventHandler; point.x = 10; point.y = 20; {} static void StructEventHandler(int point) { Console.WriteLine("Koordinaten ändern auf {0}", point); {} {}
Struct ist ein Wertetyp, daher ist er schneller als ein Klassenobjekt. Verwenden Sie bitte Struct, wenn Sie nur Daten speichern möchten. Strukturen sind in der Regel für Spieleprogramming geeignet. Allerdings ist der Übertragung von Klassenobjekten im Vergleich zu Strukturen einfacher. Daher sollten Sie Struct nicht verwenden, wenn Sie Daten über das Netzwerk oder andere Klassen übertragen.
struct kann Konstrukteure, Konstanten, Felder, Methoden, Eigenschaften, Indizierer, Operatoren, Ereignisse und eingebettete Typen enthalten.
struct kann keine Konstrukteure oder Destruktoren ohne Parameter enthalten.
struct kann die gleichen Schnittstellen wie Klassen implementieren.
struct kann keine andere Struktur oder Klasse ableiten und kann nicht als Basisklasse einer Klasse verwendet werden.
struct kann keine Mitglieder als abstrakte, geschlossene, virtuelle oder geschützte Mitglieder angeben.