Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

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

  1. Het Pleidooi voor Modernisering van Personeelsplanning om Retentie en Productiviteit te Boosten
  2. Verbeter Werkplekveiligheid: Waarom Periodieke Hercontroles van Werknemers Belangrijk Zijn
  3. 4 Bewezen Strategieën om Werknemersbetrokkenheid Te Versterken Tijdens COVID-19
  4. DVIRC Promoveert Alan Shell tot Directeur Lean/CI Diensten, Welkomt Nieuwe Medewerkers
  5. Werkvloerveiligheid verbeteren: hoe productierobotica werknemers beschermt
  6. Blijf Voorop in de Toekomst van het Werk: Strategieën om Concurrentie te Verslaan
  7. Werknemersproductiviteitsanalyse: Inzichten Ontgrendelen in de IoT-tijd
  8. C Structs onder de knie krijgen: Definitie, variabelen, toegang & geavanceerde voorbeelden
  9. C Structs en Pointers onder de knie krijgen: Een praktische gids
  10. C Structs: Doorgeven, retourneren en referentie-afhandeling onder de knie krijgen
  11. C++ Structs Uitgelegd met een Praktisch Voorbeeld