English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In C#, struct è un tipo di dati di valore che rappresenta una struttura dati. Può includere costruttori parametrizzati, costruttori statici, costanti, campi, metodi, proprietà, indici, operatori, eventi e tipi annidati.
La struttura può essere utilizzata per salvare valori di piccole dimensioni che non necessitano di ereditarietà, come punti di coordinate, coppie chiave-valore e strutture dati complesse.
La parola chiave struct viene utilizzata per dichiarare una struttura. Il modificatore predefinito è l'accesso interno della struttura e dei suoi membri.
L'esempio seguente dichiara la struttura della grafica delle coordinate.
struct Coordinate { public int x; public int y; }
Come le variabili di tipo tipo di base, è possibile creare un oggetto struct utilizzando o non utilizzando l'operatore new.
struct Coordinate { public int x; public int y; } Coordinate point = new Coordinate(); Console.WriteLine(point.x); // Output: 0 Console.WriteLine(point.y); // Output: 0
Sopra, viene creato un oggetto della struttura Coordinate (coordinata) utilizzando la parola chiave new. Chiama il costruttore di default senza parametri della struttura, che inizializza tutti i membri con i valori di default del tipo di dati specificato.
Se si dichiara una variabile di tipo struttura senza utilizzare la parola chiave new, non chiama alcun costruttore e quindi tutti i membri rimangono in uno stato non assegnato. Pertanto, è necessario assegnare valori a ciascun membro prima di accedervi, altrimenti verrà generato un errore durante la compilazione.
struct Coordinate { public int x; public int y; } Coordinate point; Console.Write(point.x); // Errore di compilazione point.x = 10; point.y = 20; Console.Write(point.x); // Output: 10 Console.Write(point.y); // Output: 20
La struttura (struttura) non può includere un costruttore senza parametri. Può includere solo un costruttore parametrizzato o un costruttore statico.
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); // Output: 10 Console.WriteLine(point.y); // Output: 20
Deve includere tutti i membri della struttura nel costruttore parametrizzato e assegnarli ai membri; altrimenti, se qualsiasi membro rimane in uno stato non assegnato, il compilatore C# genererà un errore durante la compilazione.
La struttura (struttura) può includere proprietà, proprietà implementate automaticamente, metodi, ecc., come le classi.
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); // Output: 0 Console.WriteLine(point.y); // Output: 0
La seguente struttura include metodi statici.
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); // Output: 0 Console.WriteLine(point.y); // Output: 0
Le strutture possono contenere notifiche di eventi per informare i sottoscrittori di alcune operazioni. La seguente struttura (struct) contiene un evento.
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; }
La struttura sopra riportata contiene l'evento coordinateChanged, che viene scatenato quando le coordinate x o y subiscono una variazione. Di seguito è riportato un esempio su come gestire l'evento CoordinateChanged.
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("La coordinate è stata modificata in {0}", point); } }
struct è un tipo di valore, quindi è più veloce rispetto agli oggetti di classe. Utilizzatelo ogni volta che volete solo memorizzare dati. Di solito, le strutture sono adatte per la programmazione dei giochi. Ma, rispetto alle strutture, è più facile trasmettere oggetti di classe. Pertanto, non utilizzate struct quando trasmettete dati attraverso la rete o altri tipi di classe.
La struct può includere costruttore, costanti, campi, metodi, proprietà, indexer, operatori, eventi e tipi annidati.
La struct non può includere costruttore senza parametri o distruttore.
La struct può implementare le stesse interfacce di una classe.
La struct non può ereditare un'altra struttura o una classe, né può essere una classe base.
La struct non può specificare membri astratti, membri密封,membri virtuali o membri protetti.