Klassen und Strukturen sind die beiden Grundkonstrukte desselben Typsystems im .NET Framework. Bei beiden handelt es sich im Wesentlichen um Datenstrukturen, die eine Reihe von Daten und Verhaltensweisen als logische Einheit kapseln. Daten und Verhalten sind „Mitglieder“ der Klasse oder Struktur und enthalten ihre eigenen Methoden, Eigenschaften, Ereignisse usw.
Struktur
Struktur ist der am häufigsten von C#-Programmierern verwendete Mechanismus, um ihre eigenen Werttypen zu definieren. Struktur ist leistungsfähiger als Aufzählung, da sie Methoden, Felder, Operatoren und Zugriffskontrolle usw. bereitstellt.
Strukturen sind Klassen sehr ähnlich. Beide stellen Datenstrukturen dar, die Datenelemente und Funktionselemente enthalten können. Im Gegensatz zu Klassen sind Strukturen jedoch ein Werttyp und erfordern keine Heap-Zuweisung. Variablen vom Typ Struktur enthalten direkt die Daten der Struktur, während Variablen vom Typ Klasse nur eine Referenz auf die entsprechenden Daten enthalten (die referenzierten Daten werden als „Objekt“ bezeichnet). Die
-Struktur ist besonders nützlich für kleine Datenstrukturen mit Wertesemantik. Komplexe Zahlen, Punkte in einem Koordinatensystem oder Schlüssel-Wert-Paare in einem Wörterbuch sind typische Beispiele für Strukturen. Das Wichtigste an diesen Datenstrukturen ist, dass sie nur über eine geringe Anzahl von Datenelementen verfügen, keine Verwendung von Vererbungs- oder Referenzbezeichnern erfordern und einfacher zu verwenden sind (bei der Zuweisung kopieren Sie den Wert direkt, anstatt seine Referenz zu kopieren). ).
Der Körper der Struktur
};
Die Strukturdeklaration enthält einen Satz optionaler Attribute, gefolgt von einem Satz optionaler Strukturmodifikatoren. gefolgt vom Schlüsselwort struct und einem Bezeichner, der zur Benennung der Struktur verwendet wird, gefolgt von einer optionalen Strukturschnittstellenspezifikation und schließlich einem Strukturkörper, gefolgt von einem Semikolon, falls erforderlich.
Die Strukturdeklaration kann nach Bedarf einen Strukturmodifikator enthalten: neu, öffentlich, geschützt, intern, privat
Verwendung der Struktur Es ist ein Fehler, einen Standardkonstruktor (ohne Argumente) für eine Struktur zu definieren, und es ist ein Fehler, Instanzfelder in der Struktur neu zu initialisieren. Das Initialisieren von Strukturmitgliedern kann auf zwei Arten erfolgen: Zum einen durch die Verwendung eines parametrisierten Konstruktors und zum anderen durch den separaten Zugriff auf die Mitglieder nach der Deklaration der Struktur. Alle privaten Mitglieder oder Mitglieder, auf die anderweitig nicht zugegriffen werden kann, können nur im Konstruktor initialisiert werden. Wenn Sie zum Erstellen eines Strukturobjekts den Operator „Neu“ verwenden, wird das Strukturobjekt erstellt und der entsprechende Konstruktor aufgerufen. Im Gegensatz zu Klassen können Strukturen ohne Verwendung des new-Operators instanziiert werden. In diesem Fall gibt es keinen Konstruktoraufruf, wodurch die Allokationseffizienz verbessert wird. Die Felder bleiben jedoch nicht zugewiesen und das Objekt ist erst verfügbar, wenn alle Felder initialisiert sind.
In der OOP-Methode ist eine Klasse eine hochgradig abstrakte und verallgemeinerte Darstellung der realen Welt, während ein Objekt eine Instanz einer Klasse ist. Das Objekt muss die gemeinsamen Merkmale und Verhaltensregeln seiner Klasse aufweisen Natürlich kann ein Objekt auch Eigenschaften und Verhaltensregeln haben, die nicht durch seine Kategorie spezifiziert sind. Dies ist dasselbe wie im wirklichen Leben. Aus diesem Grund ist die OOP-Methode von immer mehr Softwareentwicklern willkommen und wird von vielen Computerentwicklern unterstützt .
Die Deklaration einer Klasse in C# wird über das Schlüsselwort class instanziiert. Das Format ist:
Modifikatorklasse Klassenname: Basisklasse oder Schnittstelle
{
Klasse body
}
Darunter ist „Modifikator“, „: Basisklasse oder Schnittstelle“ optional. Der Modifikator einer Klasse kann einer der folgenden oder eine Kombination davon sein (derselbe Modifikator darf nicht mehrmals in der Klassendeklaration () vorkommen).
(1) neu: Darf nur verwendet werden, wenn eine verschachtelte Klasse deklariert wird, was angibt, dass die Klasse von der Basisklasse geerbte Mitglieder mit demselben Namen wie die Basisklasse verbirgt
(2 )public: Gibt an, dass der Zugriff auf die Klasse nicht eingeschränkt ist
(3)internal: Nur die Klasse, in der sie sich befindet, kann darauf zugreifen
(4) Private: Nur Anwendungen oder Bibliotheken in . NET kann darauf zugreifen Zugriff
(5)abstrakt: abstrakte Klasse, darf keine Instanzen der Klasse erstellen
(6)sealed: versiegelte Klasse, darf nicht vererbt werden
Anweisung zur Klassenvererbung: Die C#-Sprache unterstützt nur Einzelvererbung
(1), Konstruktor und Destruktor
C# bietet einen besseren Mechanismus zur Verbesserung der Programmsicherheit . Der C#-Compiler verfügt über eine strenge Typsicherheitsprüfungsfunktion, mit der fast alle Syntaxprobleme im Programm gefunden werden können. Nur weil das Programm die Kompilierungsprüfung besteht, heißt das jedoch nicht, dass der Fehler nicht mehr besteht.
Die C#-Sprache berücksichtigt vollständig das Auftreten von Programmfehlern und löst diese gut, indem sie die Objektinitialisierungsarbeit im Konstruktor und die Bereinigungsarbeit im Destruktor platziert. Wenn ein Objekt erstellt wird, wird der Konstruktor automatisch ausgeführt. Wenn das Objekt stirbt, wird der Destruktor automatisch ausgeführt.
Der Name des Konstruktors kann nicht zufällig gewählt werden. Er muss vom Compiler erkannt werden, bevor er automatisch ausgeführt werden kann. Die Benennungsmethode ist einfach und sinnvoll: Lassen Sie den Konstruktor denselben Namen wie die Klasse haben. Eine weitere Besonderheit des Konstruktors besteht neben dem Namen darin, dass er keinen Rückgabewerttyp hat, was sich von der Funktion unterscheidet, deren Rückgabewerttyp void ist.
Der Destruktor ist ein Methodenmitglied, das eine Instanz einer Klasse zerstört. Der Destruktor darf keine Parameter haben, keine Modifikatoren haben und kann nicht aufgerufen werden. Der Zweck des Destruktors und des Konstruktors ist unterschiedlich, daher wird dem Destruktor ein „~“ vorangestellt, um den Unterschied anzuzeigen.
Obwohl der Konstruktor und der Destruktor formal einfachere Funktionen in einer Klasse sind. Ihre Verwendung ist jedoch keineswegs so einfach, wie es scheint. Daher kann die flexible und korrekte Verwendung von Konstruktoren und Destruktoren Benutzern helfen, den Speicherverwaltungsmechanismus der CLR besser zu verstehen und die Ressourcen im System besser zu verwalten.
(2), Klassen und Objekte
Eine Klasse ist eine Sammlung von Objekten mit denselben Eigenschaften und Diensten. Es bietet eine einheitliche abstrakte Beschreibung für alle zu dieser Klasse gehörenden Objekte, die zwei Hauptteile umfasst: Eigenschaften und Dienste. In objektorientierten Programmiersprachen ist eine Klasse eine unabhängige Programmeinheit, die einen Klassennamen hat. Der Klassenname besteht aus zwei Hauptteilen: Attributbeschreibung und Dienstbeschreibung.
Ein Objekt ist eine Entität, die zur Beschreibung objektiver Dinge im System verwendet wird und eine Grundeinheit des Systems darstellt. Ein Objekt besteht aus einer Reihe von Eigenschaften und einer Reihe von Diensten, die mit der Reihe von Eigenschaften arbeiten. Aus einer abstrakteren Perspektive ist ein Objekt eine Abstraktion von etwas in der Problemdomäne oder Implementierungsdomäne. Es spiegelt die Informationen wider, die das Ding speichern muss, und die Rolle, die es im System spielt Führen Sie Operationen für diese Attribute durch. Ein Wrapper für eine Reihe von Diensten, die ausgeführt werden. Die objektive Welt besteht aus Objekten und den Verbindungen zwischen Objekten.
Die Beziehung zwischen einer Klasse und einem Objekt ist wie die Beziehung zwischen einer Form und einem Guss. Das Ergebnis der Instanziierung einer Klasse ist ein Objekt. Die Abstraktion eines Objekttyps ist eine Klasse. Eine Klasse beschreibt eine Gruppe von Objekten mit denselben Eigenschaften (Eigenschaften) und demselben Verhalten (Methoden).
Weitere Artikel zu C#-Strukturen und -Klassen finden Sie auf der chinesischen PHP-Website!