Grundlegende Einführung in c#

C#-Grundlagen



1. Was ist eine abstrakte Klasse und was ist der Unterschied zwischen ihr und einer Schnittstelle?

In C# bezieht sich eine abstrakte Klasse auf eine Klasse, die nicht instanziiert werden kann und deren Zweck darin besteht, von anderen abgeleiteten Typen geerbt und implementiert zu werden. Eine abstrakte Klasse kann abstrakte Methoden, virtuelle Methoden und nicht virtuelle Methoden enthalten, und die Unterklasse muss alle abstrakten Methoden in der übergeordneten Klasse implementieren, andernfalls muss die Unterklasse auch als abstrakte Klasse deklariert werden.

Im Gegensatz dazu ist eine Schnittstelle eine spezielle abstrakte Klasse, die nur die Signaturen von Mitgliedern wie Methoden, Eigenschaften, Ereignisse und Indexer ohne Implementierungscode enthält. Eine Klasse, die eine Schnittstelle implementiert, muss den konkreten Methodencode bereitstellen, der diese Mitglieder implementiert. Eine Klasse kann mehr als eine Schnittstelle implementieren, sodass sie den Implementierungscode für alle in der Schnittstelle definierten Mitglieder abrufen kann.

Im Hinblick auf die Verwendung sind abstrakte Klassen auf Gemeinsamkeit ausgelegt und können nicht instanziiert werden, da sie keine tatsächlichen Objekte besitzen. Die Schnittstelle schenkt dem Verhalten mehr Aufmerksamkeit und definiert eine Reihe von Regeln, sodass verschiedene Objekte ein gemeinsames Verhalten aufweisen können, was für Entwickler bequem zu programmieren ist.

2. Was ist Polymorphismus?

Polymorphismus ist ein wichtiges Konzept in der objektorientierten Programmierung. Dies bedeutet, dass dieselbe Methode oder Operation unterschiedliche Verhaltensweisen bei verschiedenen Objekten hervorrufen kann. Vereinfacht ausgedrückt: Wenn dieselbe Methode für verschiedene Objekte aufgerufen wird, führt sie zu unterschiedlichen Leistungen oder Ergebnissen.

Polymorphismus muss auf Vererbung und Schnittstellenimplementierung basieren. In C# kann Laufzeitpolymorphismus durch Vererbungsbeziehungen realisiert werden, d. h. ein abgeleitetes Klassenobjekt wird über die Basisklasse referenziert, ein Funktionsaufruf erfolgt und die entsprechende Funktionsimplementierung kann entsprechend dem spezifischen Objekttyp aufgerufen werden .

Angenommen, es gibt eine Basisklasse Animal, die über eine virtuelle Mitgliedsfunktion Speak() verfügt, und zwei abgeleitete Klassen Dog und Cat, die die Speak()-Funktion überschreiben. In Main() können wir eine Variable vom Typ Animal definieren, animal und richten Sie es dann auf ein konkretes Hunde- oder Katzenobjekt. Auf diese Weise wird beim Aufrufen der Speak()-Funktion des Tieres tatsächlich die Speak()-Funktion des jeweiligen Objekts aufgerufen, was zu unterschiedlichen Verhaltensweisen führt.

Darüber hinaus implementiert C# auch Polymorphismus zur Kompilierungszeit über Schnittstellen, d. h. verschiedene Klassen können dieselbe Schnittstelle implementieren und dabei die von derselben Schnittstelle definierten Methoden verwenden, sodass polymorphes Verhalten durch verwandte Operationen der Schnittstelle erreicht werden kann.

3. Kennen Sie kurz den Datenbankindex?

Ein Datenbankindex ist eine Datenstruktur, die das Abrufen und Bearbeiten von Daten in einer Datenbanktabelle beschleunigt. Er kann mit einem Index in einem Wörterbuch verglichen werden, sodass wir die benötigten Informationen leichter finden können.

Der Index in der Datenbank erstellt normalerweise eine Datenstruktur wie einen Binärbaum oder einen B+-Baum entsprechend einer bestimmten Spalte oder einer Kombination von Spalten, und diese Datenstrukturen ermöglichen eine schnelle Positionierung von Daten. Wenn wir die Daten in dieser Tabelle abfragen und einen Index verwenden, verwendet die Datenbank zunächst den Index, um qualifizierte Datensätze zu finden, anstatt die gesamte Tabelle Zeile für Zeile zu durchsuchen, wodurch die Abfrageeffizienz erheblich verbessert wird.

Zusätzlich zu Abfragen können Datenbankindizes auch INSERT-, UPDATE- und DELETE-Vorgänge beschleunigen. Da sich diese Vorgänge auf den Index in der Tabelle auswirken, muss die Datenbank bei der Ausführung verwandter Vorgänge auch die entsprechende Indexstruktur beibehalten.

Je mehr Indizes es gibt, desto besser, da jeder Index Speicherplatz belegen muss und beim Ändern der Tabelle alle zugehörigen Indizes aktualisiert werden müssen, sodass zu viele Indizes die Leistung von INSERT, UPDATE und DELETE beeinträchtigen. Betriebsleistung und Verschwenden Sie Computerressourcen und erhöhen Sie die Komplexität der Datenbank. Daher ist beim Entwerfen und Verwenden von Indizes sorgfältige Überlegung erforderlich, um Missbrauch zu vermeiden.

4. Die Vor- und Nachteile von Array und Arraylist und der Unterschied zwischen ihnen

Array (Array):

Vorteile: Da alle Elemente vom gleichen Typ sind, ist die Zugriffsgeschwindigkeit schnell und die Speicherauslastung hoch.
Nachteile: Die Größe kann nicht geändert werden, die Länge muss im Voraus bestimmt werden, sie wird direkt in kontinuierlichen Speicherbits gespeichert und die Einfüge- und Löschvorgänge sind ineffizient.

Array-Liste (ArrayList):

Vorteile: Die Länge kann jederzeit erhöht oder verringert werden, und es stehen viele praktische Methoden wie Hinzufügen, Entfernen usw. mit guter Flexibilität zur Verfügung.
Nachteile: Der Speicherverbrauch ist relativ hoch, da die Elementtypen unterschiedlich sein können, sodass jedes Element einen zusätzlichen Typzeiger und einen Garbage-Collection-Marker benötigt.
Der Hauptunterschied zwischen den beiden besteht darin, dass Array eine feste Größe hat und nach der Deklaration nicht mehr geändert werden kann, während ArrayList dynamisch in der Größe geändert werden kann. Gleichzeitig kann Array nur Daten desselben Typs speichern, während ArrayList Daten unterschiedlichen Typs speichern kann. Darüber hinaus ist die Effizienz der beiden Vorgänge in verschiedenen Vorgängen aufgrund der unterschiedlichen Speichermethoden unterschiedlich.

Für den Fall, dass nur derselbe Datentyp gespeichert werden muss, die Länge fest ist und die beste Leistung erforderlich ist, ist die Verwendung von Array besser geeignet; für den Fall, dass die Länge unsicher ist oder unterschiedliche Datentypen benötigt werden gespeichert, ist die Verwendung von ArrayList flexibler und bequemer.

Es ist zu beachten, dass ArrayList aufgrund des Problems des Ein- und Auspackens weniger effizient ist. Daher veröffentlichte Microsoft nach .NET Framework 2.0 generische Sammlungen wie List, Dictionary<TKey, TValue> usw., um die ursprünglichen nicht generischen Sammlungsklassen zu ersetzen. Diese generischen Sammlungen bieten eine bessere Leistung und Typsicherheit.

zurück an die Spitze


Ich denke du magst

Origin blog.csdn.net/weixin_47410172/article/details/130579278
Empfohlen
Rangfolge