C# structs: definitie, gebruik en verschillen met classes
C# Structs
Leer hoe je C# structs definieert, instantieert en ermee werkt, inclusief constructors, properties en hun belangrijkste verschillen met klassen.
In C# functioneert een struct (structure) vergelijkbaar met een klasse, maar is een value type, wat betekent dat het data direct opslaat in plaats van een referentie.
Stel we willen de naam en leeftijd van een persoon opslaan. We kunnen twee variabelen aanmaken: name en age en waarden toewijzen.
Als we deze informatie echter voor meerdere personen willen bijhouden, wordt het declareren van losse variabelen vervelend. Een struct definiëren die name en age bevat, laat ons dezelfde layout voor iedere persoon hergebruiken.
Een struct definiëren in C#
In C# gebruiken we het struct keyword om een struct te declareren. Bijvoorbeeld:
struct Employee { public int id; }
Hier is id een veld binnen de struct. Een struct kan ook methodes, indexers en meer bevatten.
Een struct-variabele declareren
Voordat je een struct gebruikt, moet je een struct-variabele aanmaken. De syntaxis is:
struct Employee { public int id; } // declareer emp van struct Employee Employee emp;
In het voorbeeld definieerden we een struct genaamd Employee en declareerden een variabele emp van dat type.
Toegang tot C# struct
Toegang tot struct-leden met de dot (.) operator:
Employee emp; emp.id = 1;
Dit wijst de waarde 1 toe aan het id-veld van de Employee struct.
Let op: Primitieve types zoals int, bool en float zijn vooraf gedefinieerde structs in C#.
Voorbeeld: C# Struct
using System; namespace CsharpStruct { // struct definiëren struct Employee { public int id; public void getId(int id) { Console.WriteLine("Employee Id: " + id); } } class Program { static void Main(string[] args) { // declareer emp van struct Employee Employee emp; // toegang tot en instellen struct veld emp.id = 1; // toegang tot struct methodes emp.getId(emp.id); Console.ReadLine(); } } }
Output
Employee Id: 1
Het programma creëert een Employee struct, stelt het id-veld in en roept de getId-methode aan om het weer te geven.
Je kunt een struct ook instantiëren met het new keyword:
Employee emp = new Employee();
Dit roept de parameterloze constructor aan en initialiseert alle velden op hun standaardwaarden.
Constructors in C# struct
Structs mogen constructors definiëren om velden te initialiseren. Voorbeeld:
struct Employee { public int id; // constructor public Employee(int employeeId) { id = employeeId; } }
Let op: Voor C# 10 konden structs geen parameterloze constructors bevatten.
Voorbeeld: Constructor in C# structs
using System; namespace CsharpStruct { // struct definiëren struct Employee { public int id; public string name; // parameterized constructor public Employee(int employeeId, string employeeName) { id = employeeId; name = employeeName; } } class Program { static void Main(string[] args) { // roept constructor van struct aan Employee emp = new Employee(1, "Brian"); Console.WriteLine("Employee Name: " + emp.name); Console.WriteLine("Employee Id: " + emp.id); Console.ReadLine(); } } }
Output
Employee Name: Brian Employee Id: 1
In dit voorbeeld wijst de constructor waarden toe aan alle velden. Het niet initialiseren van elk veld resulteert in een compile-time error.
Properties in C# struct
Structs kunnen properties exposeren voor encapsulatie. Voorbeeld:
using System; namespace CsharpStruct { // struct definiëren struct Employee { public int id; // property aanmaken 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("Employee Id: " + emp.Id); Console.ReadLine(); } } }
Output
Employee Id: 1
Hier biedt de Id property gecontroleerde toegang tot het id veld.
Verschil tussen class en struct in C#
Hoewel klassen en structs vergelijkbare syntaxis delen, verschillen ze fundamenteel:
- Een klasse is een reference type; een struct is een value type.
- Het toewijzen van een klasse-instantie kopieert een referentie, zodat twee variabelen naar hetzelfde object wijzen. Het toewijzen van een struct kopieert de volledige waarde.
- Structs ondersteunen geen overerving, klassen wel.
Voorbeeld van klasse referentie gedrag:
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("Employee1 name: " + emp1.name); Console.ReadLine(); } } }
Output
Employee1 name: Ed
Voorbeeld van struct waarde gedrag:
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("Employee1 name: " + emp1.name); Console.ReadLine(); } } }
Output
Employee1 name: John
In het struct-voorbeeld ontvangt emp2 een kopie van emp1, dus wijzigingen aan emp2 beïnvloeden emp1 niet.
Deze onderscheiden maken structs ideaal voor kleine, onveranderlijke datastructuren die profiteren van stack allocatie en value semantiek.
C Taal
- Het Pleidooi voor Modernisering van Personeelsplanning om Retentie en Productiviteit te Boosten
- Verbeter Werkplekveiligheid: Waarom Periodieke Hercontroles van Werknemers Belangrijk Zijn
- 4 Bewezen Strategieën om Werknemersbetrokkenheid Te Versterken Tijdens COVID-19
- DVIRC Promoveert Alan Shell tot Directeur Lean/CI Diensten, Welkomt Nieuwe Medewerkers
- Werkvloerveiligheid verbeteren: hoe productierobotica werknemers beschermt
- Blijf Voorop in de Toekomst van het Werk: Strategieën om Concurrentie te Verslaan
- Werknemersproductiviteitsanalyse: Inzichten Ontgrendelen in de IoT-tijd
- C Structs onder de knie krijgen: Definitie, variabelen, toegang & geavanceerde voorbeelden
- C Structs en Pointers onder de knie krijgen: Een praktische gids
- C Structs: Doorgeven, retourneren en referentie-afhandeling onder de knie krijgen
- C++ Structs Uitgelegd met een Praktisch Voorbeeld