Differenz zwischen Klasse und Struktur Unterschied zwischen

Anonim

Bevor wir den Unterschied zwischen Klasse und Struktur verstehen, sollten wir einige grundlegende Konzepte kennen, die mit ihnen verbunden sind. Ohne ein Verständnis von Konzepten ist es schwierig, die Unterschiede zwischen den beiden zu verstehen.

Was ist Klasse und Objekt:

Dies sind die beiden wichtigen Konzepte für die objektorientierte Programmierung. Sie bilden die Grundlage für das Framing der Funktionen und Daten, die an andere Funktionen übergeben werden. Zum besseren Verständnis können wir sie einem realen Beispiel zuordnen. Eine Klasse kann als Geschäft betrachtet werden, und ein Objekt kann jedes einzelne spezifische Geschäft sein, wie Lebensmittel, Schreibwaren, Obst usw. Alle Objekte teilen die gemeinsamen Eigenschaften der Hauptklasse - das Geschäft - und wiederum die Objekte können ihre eigenen exklusiven Eigenschaften haben, wie ein bestimmtes Design, eine Beleuchtung usw. Durch die Objekte können wir tatsächlich die Klasse verwenden; Sie bilden die Instanzen einer Klasse.

Syntax einer Klasse

Klassenspeicher {

public string things;

public string design;

}

Syntax eines Objekts

Store Lebensmittelgeschäft = neuer Store ();

Store Stationery = neuer Store ();

Was ist eine Struktur?

Ein Struct enthält nur die Daten, und daher ist es hilfreich, die einzelnen Datenanforderungen über die Struct-Objekte zu definieren. Im Gegensatz zu einer Klasse fehlen ihm Funktionen. Hier ist seine Syntax:

struct Lebensmittelgeschäft_Entwicklung {

char Eingangsname [50];

int Eingangsgröße;

} Lebensmitteleintritt;

Alle Geschäfte können den 'Eingang' des Struct mit individuellen Namen und Größen verwenden.

Was ist Vererbung?

Es ist ähnlich, wie ein Sohn die Besitztümer seines Vaters erbt, und der Sohn wiederum kann auch andere Besitztümer hinzufügen. Die Klasse kann entweder eine Basisklasse oder eine abgeleitete Klasse sein, wobei die erstere als Basis für die letztgenannte Klasse dienen kann. Die abgeleitete Klasse fügt abgesehen von dem, was sie von der Basisklasse erhält, nur wenige andere Eigenschaften für sich selbst hinzu. Wenn wir das obige Beispiel betrachten, kann das Gemischtwarenladen noch zu einem bestimmten Gemischtwarenladen wie XYZ Gemischtwarenladen abgeleitet werden.

Nun, da wir mit den grundlegenden Konzepten vertraut sind, können wir auf den tatsächlichen Unterschied zwischen Klasse und Struktur eingehen.

Wie unterscheiden sie sich?

  • Wiederverwendbarkeit: Da Klassen das Grundgerüst bilden, können sie wiederverwendet werden; Strukturen sind jedoch einzelne Elemente mit bestimmten Eigenschaften, so dass sie nicht wiederverwendet werden können. Zum Beispiel kann die Lebensmittelgeschäft Klasse für jede Art von Lebensmittelgeschäft verwendet werden, aber die Struct Lebensmittelgeschäft_Eintritt ist nur für diese allein und es gibt keinen Sinn, es in anderen Klassen zu verwenden.
  • Sichtbarkeit: Alle Funktionen einer Klasse sind für ihre Objekte öffentlich verfügbar.Zum Beispiel haben wir eine Funktion namens "Dinge" unter der Klasse "Geschäft". Die Funktion "Dinge" ist für alle ihre Objekte sichtbar, wie zum Beispiel "Lebensmittelladen", "Schreibwarengeschäft" usw. Eine solche Sichtbarkeit ist mit Structs nicht möglich, da die Daten von struct auf sich selbst beschränkt und für andere Structs nicht sichtbar sind. Um die Dinge klarzustellen, können wir sagen, dass die Daten von "Lebensmittelgeschäft" für alle anderen Geschäfte nicht öffentlich sichtbar sind.
  • An Referenz übergeben und an Wert übergeben: An Referenz übergeben sendet nur den Speicherort und nicht die tatsächlichen Daten an die Funktionen. Dies bedeutet, dass sich die Änderung bei jeder Änderung des Werts in den entsprechenden Funktionen widerspiegelt. Übergeben nach Wert sendet der Wert einfach an die Funktion. In diesem Fall wird eine Änderung des Werts nach dem Senden nicht in der Funktion wiedergegeben. Klassenverwendungen werden als Verweis übergeben, und Struct verwendet den Wert pass.
  • Vererbung: Klassen können weiter vererbt werden, um Unterklassen zu bilden, aber Structs kann keine Vererbung verwenden. Zum Beispiel gibt der Klassenspeicher seine Funktionen an die Unterklasse "Lebensmittelgeschäft" weiter. Aber der Struct 'grocery_entrance' kann keine Funktion übernehmen. Wir können sagen, dass es hier kein Konzept wie Sub-Struktur gibt.
  • Standardsichtbarkeit: Alle Mitglieder einer Klasse werden standardmäßig als private Entitäten geführt, während die Mitglieder eines Struct standardmäßig als öffentliche Entitäten geführt werden.
  • Die Größe eines leeren Class and Struct: Class verwendet eine Größe von 1 Byte, auch wenn es leer ist, während Struct niemals einen Speicher verwendet, wenn dieser leer ist. Das heißt, wir können sagen, dass die Größe einer leeren Struktur gleich 0 Bytes ist.
  • Garbage collection: Garbage Collection ist mit Classes möglich, da sie by pass by reference verwendet werden. Daher ist es einfacher, die Bereinigung an einer Stelle durchzuführen, an der die Daten gespeichert sind. Auf der anderen Seite ist eine Speicherbereinigung mit Struct nicht möglich, da sie einen Wert für die Übergabe verwendet und die Daten an verschiedenen Orten verstreut sind.
  • Speicherverwaltung: Da die Klasse Speicherbereinigungen zulässt, ist auch die Speicherverwaltung wirksam. es ist jedoch nicht so effektiv mit Structs.
  • Konstruktor: Ein Konstruktor initialisiert die Klasse im Allgemeinen mit bestimmten angegebenen Werten. Wir können es als etwas betrachten, das mit Werten initialisiert wurde. Wenn eine neue Klasse erstellt werden muss, wird der Konstruktor aufgerufen, um Speicher für diese Instanz zuzuweisen. Wir können sogar Werte als Argumente übergeben, während wir einen Konstruktor aufrufen. Kommen wir jetzt zu unserer aktuellen Diskussion. Klassen erlauben Konstruktoren aller Typen, beispielsweise mit oder ohne Argumente, während Strukturen die Konstruktoren nur mit Argumenten erlauben, d. e. die parametrisierten Konstruktoren.
  • Destruktor: Ein Destruktor wird aufgerufen, wenn wir eine Instanz einer Klasse löschen müssen. Der Destruktor wiederum löscht diese Instanz und gibt Speicher frei. Eine Klasse kann einen Destruktor verwenden, während ein Struct nicht kann.
  • Elementvariable-Initialisierung: In Klassen können wir die Elementvariablen direkt initialisieren; Eine solche Initialisierung ist mit Structs nicht möglich.
  • Objekterstellung: Die allgemeine Syntax für die Objekterstellung in Klassen lautet:

Demo obj = new Demo ();

Dies bedeutet, dass wir beim Erstellen von Objekten einer Klasse das Schlüsselwort 'new' verwenden müssen.Dies ist nicht erforderlich, wenn Objekte von Structs erstellt werden. Sehen Sie sich deren Syntax an:

Demo obj;

Es funktioniert auch ohne das Schlüsselwort "neu" einwandfrei.

Wann sollte die Klasse verwendet werden und wann sollte sie verwendet werden?

Da Klassen bei der Übergabe von Daten und Funktionen flexibler sind, können wir darauf zurückgreifen, wenn die verwendeten Objekte komplex und groß sind. In unserem Beispiel kann eine Mall die Klasse 'store' verwenden, um das System besser auszudrücken. Strukturen sind jedoch auf kleinere Objekte beschränkt, da sie vergleichsweise weniger effektiv als Klassen sind. Wenn Sie also ein eigenes Geschäft entwerfen, sind Structs die bessere Wahl.

Wie konvertiert man ein Struct in eine Klasse und umgekehrt?

Vielleicht haben Sie die Begriffe "Boxen" und "Unboxing" gehört, um ein Struct in eine Klasse umzuwandeln und umgekehrt. Obwohl dies effektive Prozesse sind, die uns bei der Konvertierung helfen, sollten sie mit Vorsicht gehandhabt werden. Da sich dies direkt auf die Speicherorte auswirkt, hat dies einen großen Einfluss auf die Leistung unseres Systems. Darüber hinaus wirkt es sich auf die Speicherbereinigungsprozesse aus und führt zu einer allgemeinen Systemineffizienz. Verwenden Sie diese Konvertierungen daher nur bei Bedarf.

Betrachten wir die oben genannten Unterschiede in Tabellenform.

S. Nein Konzepte Unterschiede
Klasse Struktur
1 Wiederverwendbarkeit Vollständig wiederverwendbar Nicht wiederverwendbar
2 Sichtbarkeit < Alle Funktionen einer Klasse sind für ihre Objekte sichtbar. Die Daten eines Objekts eines Struktes sind für andere Objekte desselben Struktes nicht sichtbar. 3
Überspringen nach Referenz & Überschreiten nach Wert > Verwendet Pass by Reference Verwendet Pass by Value 4 Vererbung
Die Funktionen einer Klasse können von ihren Unterklassen geerbt werden; Erlaubt Erlaubt nie die Vererbung 5 Standardsichtbarkeit
Alle Mitglieder einer Klasse sind standardmäßig privat Alle Mitglieder eines Struct sind standardmäßig 6 Size When Empty
Die Größe einer leeren Klasse ist 1 Byte Die Größe des leeren Struct ist 0 Bytes 7 Garbage Collection
Da Garbage Collection als Referenz verwendet wird, ist Garbage Collection möglich Bei der Verwendung des Übergabewerts ist die Speicherbereinigung nicht möglich. 8 Speicherverwaltung
Die Leichtigkeit des Speicherbereinigungsprozesses hilft bei der effektiven Speicherverwaltung. Die fehlende Speicherbereinigung führt zu schlechten Ergebnissen Speicherverwaltung 9 Konstruktoren
Erlaubt Konstruktoren aller Typen, zB mit oder ohne Parameter Erlaubt nur parametrisierte Konstruktoren 10 Destruktoren
Kann es verwenden Kann nicht benutze es 11 Initialisierung von Elementvariablen
Erlaubt direkte Initialisierung von Elementvariablen Erlaubt keine direkte Wortinitialisierung von Elementvariablen 12 < Objekterstellung Bei der Objekterstellung ist es zwingend erforderlich, das Schlüsselwort 'neu' zu verwenden.
Bei der Objekterstellung kann optional das Schlüsselwort 'neu' verwendet werden. 13 Wann verwenden? Besser für größere und komplexe Objekte, für die eine Vererbung erforderlich ist
Besser für kleinere und einfachere Objekte, bei denen Vererbung weniger wichtig ist. Wir haben fast alle Unterschiede zwischen Klasse und Struktur abgedeckt, und wenn Sie das Gefühl haben, dass etwas fehlt, lassen Sie es uns bitte wissen. Lasst uns gemeinsam lernen und dieses Wissen optimal nutzen!