Heim > Backend-Entwicklung > C#.Net-Tutorial > C#-Struktur vs. Klasse

C#-Struktur vs. Klasse

WBOY
Freigeben: 2024-09-03 15:07:59
Original
776 Leute haben es durchsucht

Wie der Name schon sagt, verwendet C# das Schlüsselwort „struct“, um die Werttypen zu definieren, und Class verwendet das Schlüsselwort „class“, um die Referenztypen zu definieren. In C# werden die in der Struktur definierten Variablen im Stapel oder im angegebenen Variablentyp gespeichert und die Instanzen werden als Strukturvariable aufgerufen. Bei einer „Klasse“ hingegen werden die Instanzen als Objekte bezeichnet und in einer Heap-strukturierten Speichereinheit gespeichert. In Bezug auf Konstruktoren und Destruktoren kann die C#-Struktur keinen Destruktor haben, eine Klasse kann jedoch einen Destruktor haben. Die Klassifizierung von Mitgliedern ist in der Klasse zulässig, z. B. abstrakte, virtuelle und geschützte Typen.

Direkter Vergleich zwischen C#-Struktur und Klasse (Infografiken)

Unten sind die 14 wichtigsten Unterschiede zwischen C# Struct und Class.

C#-Struktur vs. Klasse

Hauptunterschiede zwischen C#-Struktur und Klasse

Einige wichtige Unterschiede zwischen C#-Struktur und -Klasse sind wie folgt:

  1. Eine Struktur kann mit dem Schlüsselwort „struct“ deklariert werden, während eine Klasse mit dem Schlüsselwort „class“ deklariert werden kann.
  2. Die Struktur ist ein Werttyp, daher besteht eine Strukturtypvariable direkt aus den Strukturdaten, während die Klasse ein Referenztyp ist und die Klassentypvariable aus einer Referenz auf die Daten besteht, die wir als Objekt der Klasse bezeichnet haben.
  3. Klassentypvariablen werden im Heap zugewiesen und können durch Garbage Collection gesammelt werden, während Strukturtypvariablen entweder im Stapel oder inline im enthaltenden Typ zugewiesen werden.
  4. Ein Klassenobjekt wird mit dem Schlüsselwort „new“ erstellt, während das Strukturobjekt mit oder ohne Schlüsselwort „new“ erstellt werden kann. Durch das Instanziieren einer Struktur ohne Verwendung eines „neuen“ Operators kann der Benutzer nicht auf seine Methoden, Eigenschaften oder Ereignisse zugreifen.
  5. Jede Variable in struct enthält ihre Datenkopie (mit Ausnahme von Ref- und Out-Parametervariablen), sodass Änderungen, die an einer Variablen vorgenommen werden, keine Auswirkungen auf eine andere Variable haben, während in der Klasse zwei oder mehr Variablen auf dasselbe Objekt und alle daran vorgenommenen Änderungen verweisen können Eine Variable kann eine andere Variable beeinflussen. Wir können diesen Punkt anhand der folgenden Beispiele verstehen.

Beispiel mit struct

Code:

using System;
namespace structAndClass
{
//creating structure
public struct Demo
{
public int x, y;
//parameterized constructor
public Demo(int x, int y)
{
this.x = x;
this.y = y;
}
}
public class StructDemo
{
public static void Main(string[] args)
{
Demo a = new Demo(50, 50);
Demo b = a;
a.x = 100;
Console.WriteLine("Value of a.x = "+a.x);
Console.WriteLine("Value of b.x = "+b.x);
}
}
}
Nach dem Login kopieren

Ausgabe:

C#-Struktur vs. Klasse

Beispiel mit der Klasse

Code:

using System;
namespace structAndClass
{
public class Demo
{
public int x, y;
public Demo(int x, int y)
{
this.x = x;
this.y = y;
}
}
public class StructDemo
{
public static void Main(string[] args)
{
Demo a = new Demo(50, 50);
Demo b = a;
a.x = 100;
Console.WriteLine("Value of a.x = "+a.x);
Console.WriteLine("Value of b.x = "+b.x);
}
}
}
Nach dem Login kopieren

Ausgabe:

C#-Struktur vs. Klasse

  1. Die Zuweisung und Freigabe von Speicher für den Strukturtyp ist günstiger als für den Klassentyp.
  2. Eine Struktur kann keinen parameterlosen Instanzkonstruktor haben, sie kann einen parametrisierten oder statischen Konstruktor haben, während eine Klasse einen standardmäßigen parameterlosen Konstruktor enthalten kann.
  3. Eine Struktur kann keinen Destruktor haben, wohingegen eine Klasse einen Destruktor haben kann.
  4. Wir können eine Struktur nicht von einer anderen Struktur oder Klasse erben und sie kann nicht die Basis einer Klasse sein, wohingegen wir eine Klasse von einer anderen Klasse erben können und eine Klasse die Basis einer anderen Klasse sein kann. Daher unterstützt die Klasse die Vererbung, während die Struktur die Vererbung nicht unterstützt.
  5. Wir können die Mitglieder einer Struktur nicht als abstrakt, virtuell oder geschützt angeben, während die Mitglieder einer Klasse als abstrakt, virtuell oder geschützt angegeben werden können.
  6. Die Instanz der Klasse wird als Objekt bezeichnet, während die Instanz einer Struktur als Strukturvariable bezeichnet wird.
  7. Wenn wir keinen Zugriffsbezeichner angegeben haben, sind die Mitglieder einer Klasse standardmäßig privat, während die Mitglieder einer Struktur standardmäßig öffentlich sind.
  8. Klasse wird für komplexe Datenstrukturen verwendet, während Struktur für kleine Datenstrukturen verwendet wird.

Vergleichstabelle zwischen C#-Struktur und Klasse

Sehen wir uns zum besseren Verständnis einige weitere Unterschiede zwischen C# Struct und Class anhand einer Vergleichstabelle an:

Parameter C# Struct Class
Data type The structure is a value type of data type. Class is a reference type data type.
Keyword The structure can be defined using the ‘struct’ keyword. The class can be defined using the ‘class’ keyword.
Storage area The structure variable is stored either in stack or inline in containing type. The object of the class is stored in heap.
Instance creation The instance of a struct can be created with or without a ‘new’ keyword. The instance of the class is created using a ‘new’ keyword.
Assignment If we make an assignment to a variable of struct type then it creates a copy of the value being assigned. Thus, each variable instructs has its copy of data. If we make an assignment to a variable of class type then it copies the reference. Thus, two or more variables in class can refer to the same object.
Constructor The structure does not contain a parameterless instance constructor. The class contains a parameterless instance constructor, if not defined explicitly by the user.
Destructor It cannot have a destructor. It can have a destructor.
Inheritance The structure cannot inherit from another class or structure.

The structure cannot be used as a base for another structure or class.

The class can inherit from another class. The class can be a base class for another class.
Data members Members of a struct cannot be abstract, virtual or protected. Members of a class can be abstract, virtual or protected.
Instance The instance of the structure is called the structure variable. The instance of the class is called an object.
Default access specifier Members of the structure are public by default. Members of the class are private by default.
Usage The structure can be used for small data structures. Class is used for the complex data structure.
Garbage collection The instance of a struct cannot be garbage collected. The instance of the class can be garbage collected.
Variable initializing Including variable initializer is not allowed while making instance field declarations instruct. Including variable initializer is allowed while making instance field declarations in a class.

Fazit

Sowohl Klasse als auch Struktur werden zum Speichern verwandter Datenelemente verwendet. Wir können die Klasse für eine große Datenmenge und die Struktur für kleine Datenmengen verwenden. Die Klasse ist vom Referenztyp und wird im Heap gespeichert, während die Struktur vom Werttyp ist und im Stapel gespeichert wird.

Das obige ist der detaillierte Inhalt vonC#-Struktur vs. Klasse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage