CLR: Common Language Runtime (.net Common Language Runtime) verwaltet die Ausführung aller von der .net-Bibliothek entwickelten Anwendungen
CTS: Common Type System (Common Type System) spezifiziert die grundlegendsten Typen Fördern die Interoperabilität zwischen verschiedenen Sprachen mithilfe des .NET Framework
CIL: Gemeinsame Zwischensprache (Common Intermediate Language) kompiliert den Code in diese Sprache. Der CIL-Code ist unabhängig von Computer, Betriebssystem und CPU kompiliert durch den JIT-Compiler. Erstellen Sie den erforderlichen nativen Code mit
JIT: Just-in-Time (CIL-Code wird nur bei Bedarf kompiliert).
Verwalteter Code: Kompilieren Sie den Code in CIL, speichern Sie ihn in einer Assembly und verwenden Sie JIT Der Compiler kompiliert den Code, der von der nativen Maschine benötigt wird, und verwaltet außerdem die Ausführung des im .NET Framework geschriebenen Codes.
Erforderliche Schritte zum Erstellen einer .NET-Anwendung:
->Schreiben Sie den Anwendungscode mit C#
->Kompilieren Sie den Code in CIL und speichern Sie ihn in der Assembly
-> Beim Ausführen von Code muss der Code mit einem JIT-Compiler zu nativem Code kompiliert werden
-> Ausführen von nativem Code unter einer verwalteten CLR-Umgebung
Zurücksetzen vs. c#development-Einstellungen: Fehler 1: Fehler beim Importieren von Einstellungen für „CoffeeScript“ [Code 5297].
Escape-Sequenz, verwenden Sie beispielsweise „um“ doppelte Anführungszeichen zu maskieren, und verwenden Sie n, um das Zeilenumbruchzeichen zu maskieren.
String-Einfügung: Geben Sie beispielsweise „Console.WriteLine($“{outline}“) aus. ;
Operatorpriorität: ++, -- wird als Präfix verwendet, (), +, - wenn unär,! , ~
*, /, %
+, -
<<,>>
<,>,<=,>=
==, !=
&
^
|
&&
||
=,*=,/=,%=,+=,-=,<<=,> ;>=,&=,^=,|=
++,--wird als Suffix verwendet
C#-Zweigtechnologie: ternärer Operator, if-Anweisung, Switch-Anweisung
Switch-Anweisung In C++ Sie können einen weiteren Fall ausführen, nachdem Sie eine case-Anweisung ausgeführt haben. Dies ist jedoch in C# illegal. Jede case-Anweisung erfordert eine Pause, um die Switch-Ausführung zu unterbrechen.
Darüber hinaus können Sie die return-Anweisung verwenden, die nicht nur die switch-Struktur unterbricht. Unterbrechen Sie aber auch die Ausführung der aktuellen Funktion. Sie können auch die goto-Anweisung verwenden.
Drei Arten von Schleifen: do-Schleife, while-Schleife, for-Schleife
Schleifenunterbrechungsbefehle: break, continue, return
Verwenden Sie aktiviert, um die Überlaufprüfung festzulegen. Kontext
Aufzählung: Das Konvertieren von Aufzählungswerten in andere Typen erfordert eine explizite Konvertierung
Verwenden Sie replace("str1", "str2"), um die Funktion zu ersetzen und zu verwenden str2 zum Ersetzen aller Zeichenfolgen. Der Befehl str1
Übergeben Sie Parameter per Referenz-Ref-Schlüsselwort. Um den Parameterwert des Aufrufs zu ändern, müssen Sie danach eine „nicht konstante“ Variable verwenden Initialisierung.
Oder verwenden Sie den Ausgabeparameter out, um nicht zugewiesene Variablen zu verwenden. Wenn die Funktion out verwendet, muss sie als nicht zugewiesen betrachtet werden.
Das Schlüsselwort static definiert globale Variablen und const definiert globale Konstanten
Die Signatur einer Funktion enthält den Namen der Funktion und ihre Parameter, jedoch nicht ihren Rückgabetyp
Delegate: ein Typ das Funktionsreferenzen speichert, nicht Bei einem Funktionskörper gibt die Delegate-Deklaration unter Verwendung des Schlüsselworts „delegate“ einen Rückgabetyp und eine Parameterliste an
Klasse: verstanden als die Autoplanungszeichnung, Objekt: verstanden als das Auto selbst .
Die Klasse bestimmt die Eigenschaften und das Verhalten, das das Objekt haben wird.
Klassenprogramm
{ //Sie können Felder, Funktionen, Eigenschaften und Konstruktoren schreiben. .
//Feld: Daten speichern Attribut: Feld schützen wird festgelegt (Instanziierung ist erforderlich, wenn automatische Attribute geschützt werden) Funktion: Beschreiben Sie das Verhalten des Objekts Konstruktor: Initialisieren Sie das Objekt und weisen Sie jedem Attribut des Objekts einen Wert zu
}
Verbesserung der Grundlage von Chuanzhi Podcast 1:
oop:
Kapselung:
---> Reduzieren Sie viel redundanten Code
---> Die Kapselung wird schwer zu verstehen sein. Die Funktionen sind gekapselt, es wird jedoch eine sehr einfache Schnittstelle zur Außenwelt bereitgestellt. Wir werden es gut nutzen.
Vererbung:
---> Reduziert redundanten Code in Klassen
---> Ermöglicht Klassen eine Beziehung zueinander und legt den Grundstein für Polymorphismus.
Eigenschaften:
Einzelne Wurzel: Eine Unterklasse kann nur eine übergeordnete Klasse haben
Transitivität: Opa-Klasse Papa-Klasse Sohn-Klasse
Richter-Transformation:
1. Unterklassen können der übergeordneten Klasse Klasse zugewiesen werden
2. Wenn die übergeordnete Klasse ein Unterklassenobjekt enthält, können Sie die übergeordnete Klasse in das entsprechende Unterklassenobjekt konvertieren
----> Schlüsselwörter
1. ist: return bool Typ, der angibt, ob diese Konvertierung erfolgt kann durchgeführt werden
2. als: Wenn die Konvertierung erfolgreich ist, wird das Objekt zurückgegeben, andernfalls wird null zurückgegeben
Funktion: Wir können alle Unterklassen als übergeordnete Klassen betrachten und Operationen an der übergeordneten Klasse ausführen. Programmierung, universelles Schreiben Code, passt sich ändernden Anforderungen an.
Polymorphismus:
. gt;Schnittstelle
inter Gesicht
Schlüsselwörter
neu
1. Erstellen Sie ein Objekt
dieses
1. Ein Objekt, das die aktuelle Klasse darstellt
2. Expliziter Aufruf des eigenen Konstruktors
base
1. Expliziter Aufruf des Konstruktors der übergeordneten Klasse (kein Objekt der übergeordneten Klasse)
2. Aufruf von Mitgliedern der übergeordneten Klasse
Der statische Konstruktor kann nur unter den folgenden Umständen ausgeführt werden:
*Beim Erstellen einer Klasseninstanz, die einen statischen Konstruktor enthält
*Zugriff auf den statischen Konstruktor einer Klasse, die einen statischen Konstruktor enthält. Wenn Mitglieder
Zeichenfolge enthalten und Objekt sind einfache Referenztypen, Arrays sind implizite Referenztypen, jede erstellte Klasse ist ein Referenztyp
Der Compiler lässt nicht zu, dass abgeleitete Klassen besser zugänglich sind als der Basistyp.
Schnittstellen haben nicht die Schlüsselwörter „abstract“ und „sealed“ (sie enthalten keinen Implementierungscode, können nicht direkt instanziiert werden und müssen vererbbar sein). Die Schnittstelle ist keine Klasse und erbt daher nicht die Methoden System.Object
system.Object enthält:
ReferenceEquals() bool: Vergleichen Sie die beiden an sie übergebenen Objekte um zu sehen, ob sie gleich sind. Ein Verweis auf eine Instanz
ToString() String: Gibt die Zeichenfolge zurück, die der Objektinstanz entspricht
MemberwiseClone()-Objekt: Erstellt eine neue Objektinstanz und kopiert die Mitglieder, um das Objekt zu kopieren
GetType() System.Type: Gibt den Objekttyp zurück (typeof-Operator: kann den Klassennamen in ein System.Type-Objekt konvertieren)
Konstruktorinitialisierer, der den Code nach dem Doppelpunkt der Methodendefinition einfügt. Beispielsweise können Sie den Basisklassenkonstruktor angeben, der in der Konstruktordefinition der abgeleiteten Klasse verwendet werden soll.
Verwenden Sie das Schlüsselwort base(), um den .NET-Instanziierungsprozess anzugeben.
Definieren Sie eine Klasse, die nicht erstellt werden kann: Definieren Sie sie als statische Klasse Alle seine Konstruktorfunktionen werden als privat definiert.
Klassen, die nicht erstellt werden können, können über die statischen Mitglieder verwendet werden, die sie besitzen.
Verwenden Sie für die ArrayList-Sammlung die Add()-Methode des Objekts, um neue Elemente hinzuzufügen.
Ertragsiteration
Beim Boxen wird der Werttyp in das System konvertiert. Objekttyp oder Konvertierung Ist ein Schnittstellentyp, der durch einen Werttyp implementiert wird. Beim Auspacken ist das Gegenteil der Fall.
Funktion: Ermöglicht die Verwendung von Werttypen in Sammlungen, deren Elementtyp Objekt ist. Zweitens gibt es einen internen Mechanismus, der es ermöglicht, die Objektmethode für den Werttyp aufzurufen.
is-Operator:
Zuweisungsoperatoren wie += können nicht überladen werden, noch können && und || überladen werden
IComparable ist in der Klasse des zu vergleichenden Objekts implementiert und kann dieses Objekt mit einem anderen Objekt vergleichen : Bietet CompareTo(), int, akzeptiert ein Objekt
IComparer ist in einer separaten Klasse implementiert und kann zwei beliebige Objekte vergleichen: Bietet Compare(), int, akzeptiert zwei Objekte
Class Comparer stellt die ICompare-Schnittstelle bereit. Die Standardimplementierung : Comparer.Default.Compare(one,two). CaseInsensitiveComparer-Klasse:
deklariert einen nullbaren Typ: int? nullableInt? ist die Abkürzung von System.Nullable
Null-Koaleszenzoperator?? Mit dem leeren Bedingungsoperator? können Sie einen Standardwert festlegen, wenn das Ergebnis null ist:
int? count=customer.order?.Count() ?? 0;
Außerdem eine weitere Verwendung des leeren Bedingungsoperators Der Operator ist ein auslösendes Ereignis.
Kovarianz, Variationsresistenz:
Generische Typparameter werden als Kovarianz definiert, fügen Sie das Schlüsselwort out hinzu, andernfalls verwenden Sie das Schlüsselwort in für Variationsresistenz
Chuanzhi Podcast:
1. Importieren Sie den Namespace
Der Namespace ist der „Ordner“ der Klasse. Klassen sind Dateien in einem „Ordner“. Namespace muss importiert werden
Referenz hinzufügen:
Wenn ich auf eine Klasse in einem anderen Projekt in einem Projekt zugreifen muss
— ---> Referenz auf ein anderes Projekt hinzufügen
— -> Namespace importieren
2. Statische und nicht statische
Statische Mitglieder: geändert durch statische
Instanzmitglieder: nicht geändert durch statische
Statische Mitglieder werden nur dann in den Speicher geladen, wenn ein Objekt erstellt wird Mitglieder.
In einer statischen Klasse können nur statische Mitglieder vorhanden sein.
Aufruf eines statischen Mitglieds:
Name eines statischen Mitglieds. (Die Instanz ist unser Objekt)
Wann sollte statisch verwendet werden?
---->Als Werkzeugklasse, wie alle Erweiterungsmethoden! Statisch
----> Die gemeinsame Nutzung von Ressourcen ist während des gesamten Projekts erforderlich. Nur weil es sich um eine gemeinsame Nutzung von Ressourcen handelt, müssen statische Mitglieder warten, bis das gesamte Projekt abgeschlossen ist
, bevor Ressourcen freigegeben werden.
Statische Elemente sollten in unseren Projekten so wenig wie möglich verwendet werden.
Vererbung ist der Prozess der Erstellung von Objekten.
3. Entwurfsmuster
----> Singleton-Entwurfsmuster
Während des gesamten Programms müssen wir sicherstellen, dass das Objekt eindeutig ist.
Implementierung:
InitializeComponent();
Objekt
public static Form2. ; 🎜>} ---- & gt; Einfacher Fabrikdesignmodus
: Nehmen Sie alle Unterklassen als übergeordnete Klasse, um sie anzuzeigen
Übung:
Erinnerung daran, zwei Zahlen getrennt einzugeben:
符> Geben Sie den Operator ein: Kehren Sie zu einer berechneten übergeordneten Klasse zurück und rufen Sie die Methode auf, um die Ergebnisse zu erhalten.
Die Eigenschaft
Entwurfsmuster werden zur Lösung spezifischer Probleme verwendet.
4. Klassenbibliothek
.dll-Datei, wir verwenden die Klassenbibliothek, um einige allgemeine Funktionen zu kapseln
5. Werttyp und Referenztyp
Werttyp: int double char decimal struct enum
Referenztyp: String-Array, benutzerdefinierter Klassenschnittstellen-Delegat
Werte des Werttyps werden auf dem Speicherstapel gespeichert, und Werte des Referenztyps werden im Heap gespeichert.
Das Speichern von Daten auf dem Stapel ist effizienter als auf dem Heap.
Wertübergabe: Übergeben Sie den Werttyp als Parameter und den Wert selbst.
Hinweis:
ref kann die Wertübertragung in eine Referenzübertragung ändern.
Übergabe als Referenz: Übergeben Sie einen Referenztypwert als Parameter, und was übergeben wird, ist eine Referenz.
6. Lernen von Zeichenfolgen
Wichtige Funktionen:
Unveränderlichkeit, egal welche Operationen wir an der Zeichenfolge ausführen, es wird eine neue Instanz im Speicher generiert.
Residenter Pool
Wir können uns einen String als ein schreibgeschütztes Array vom Typ char vorstellen.
GC: Garbage Collection, von Zeit zu Zeit scannt es den gesamten Speicher und stellt fest, ob auf einen Speicherplatz nicht verwiesen wird. dann vernichte es sofort.
<.> 1. Erklären Sie die Nichtvariabilität der Zeichenfolgen. 2. Die Eigenschaften des „temporären Einzahlungspools“ der Zeichenfolgenkonstante.
Zeichenfolgenzeichenfolge, eine Zeichenfolge kann als unveränderliches Zeichenarray betrachtet werden (Ändern der Elemente in der Zeichenfolge durch eine for-Schleife, fehlschlagen!).
Attribute
Länge //Ermitteln Sie die Anzahl der Zeichen in der Zeichenfolge. „aA我你他“→5
Methode
IsNullOrEmpty() Statische Methode, beurteilt als null oder „“ (statische Methode)
ToCharArray() String in char[] konvertieren
ToLower( ) Kleinbuchstaben , muss einen Rückgabewert erhalten. (Weil: string unveränderlich ist);
ToUpper() in Großbuchstaben.
Equals() Vergleicht, ob zwei Zeichenfolgen (Adress-/Objektstatus und == vergleicht Objektreferenzen) gleich sind. Ignorieren Sie den Vergleich des Falls, stringCompatch. // Für den String-Typ, ob es sich um eine gleiche Zahl oder einen Equals-Vergleich mit dem Wert selbst handelt.
//Equals vergleicht standardmäßig Adressen, aber wenn wir Equals in einer von uns definierten Klasse verwenden, schreiben wir Equals um, damit es entsprechend unseren eigenen Anforderungen verglichen werden kann Die entsprechenden Daten geben -1 zurück. //Interviewfrage: Zählen Sie, wie oft „Tiananmen“ in einer Zeichenfolge vorkommt.
LastIndexof () Wenn die entsprechenden Daten nicht gefunden werden, geben Sie -1 zurück
Substring () // 2 schwere Lasten, Zeichenfolge abfangen.
Split() //Teile die Zeichenfolge.
Statische Methode „Join()“
„Replace()“
Objektinitialisierer: Verwenden Sie einen nicht standardmäßigen Konstruktor/kein Hinzufügen von zusätzlichem Code erforderlich, verwenden Sie Schlüssel-Wert-Paare für jede Eigenschaft, um sie bereitzustellen Wert .
var-Schlüsselwort, implizite Formel-Inferenzvariable Typ, der int, string, array sein kann (numerische Werte werden niemals als nullbare Typen interpretiert, es sei denn, new int?[] ist definiert) usw.
dynamisches Schlüsselwort, dynamischer Variablentyp,
optionale Parameter, Parameter ohne Standardwerte können nicht mit Standardwerten platziert werden nach dem Wertparameter.
Benannte Parameter, die Reihenfolge der Parameter ist willkürlich und optional. Wenn Sie jedoch benannte und Positionsparameter mischen, müssen Sie alle Positionsparameter einbeziehen, gefolgt von den benannten Parametern.
Lambda-Ausdruck: Es handelt sich um einen Delegaten, der einer Variablen vom Typ Delegat zugewiesen wird; interpretiert als Ausdrucksbaum
Leistung: Parameterliste in Klammern => C#-Anweisung/{Mehrere Codezeilen + wenn noch It ist kein ungültiger Delegat, Sie müssen return hinzufügen. Das LINQ-Framework enthält eine generische Klasse, die zum Kapseln von Lambda-Ausdrücken verwendet werden kann. Eine Möglichkeit, diese Klasse zu verwenden, besteht darin, den in C# geschriebenen Lambda-Ausdruck zu extrahieren und in ihn zu konvertieren Die entsprechende SQL-Skript-Erweiterungsmethode Aggregate() bedeutet, dass auf jedes Elementpaar vom Anfang bis zum Ende der Sammlung eine Akkumulatorfunktion angewendet wird. Chuanzhi Podcast Basic Strengthening 3:
1. StringBuilder: Ein Tool zur Durchführung einer großen Anzahl von String-Operationen. String-Objekte sind unveränderlich.
Konvertieren Sie StringBuilder in String mit ToString();
Es ist nur ein Tool zum Zusammenfügen von Strings, die meisten davon werden auch in String konvertiert
*StringBuilder sb=new StringBuilder();
*sb .Append( );//String anhängen
*sb.ToString();//ToString("x2"), was eine Konvertierung in Hexadezimal bedeutet und zweistellig ist.
*sb.Insert();
*sb.Replace();
Verwenden Sie ein Programm, um Tabellen in HTML zu verbinden: Es gibt keinen DocumentText für Formularanwendungen in WPF, Sie können nur webBrow.NavigateToString( verwenden sb. ToString());
2. out: Der out-Parameter konzentriert sich auf die Rückgabe mehrerer Werte in der Funktion; der Parameteranforderung muss ein Wert innerhalb der Methode zugewiesen werden
3. Ref-Parameter: Der Der Ref-Parameter konzentriert sich darauf, einen Wert bereitzustellen. Nehmen Sie Änderungen an der australischen Funktion vor und bringen Sie dann die geänderten Werte heraus. Der REF-Parameter muss nicht innerhalb der Funktion zugewiesen werden. Die Funktion muss dem REF-Parameter
4,
5, der Sammlung der Sammlung:
nicht generische Sammlung:
ArrayList Hashtable
Generierungstyp Sammlung:
Liste
Kapazität: Die Anzahl der Elemente, die in die Sammlung aufgenommen werden können (Anfangswert). ist 4, jedes Mal verdoppelt)
Count: Den Satz abrufen Die Anzahl der tatsächlich enthaltenen Elemente
Add(): Ein einzelnes Element hinzufügen
AddRange(): Eine Sammlung hinzufügen
Insert(): Ein Element einfügen
InsertRange(): Eine Sammlung einfügen
Remove(): Das angegebene Element entfernen
RemoveAll(): Darin befindet sich ein Lambda-Ausdruck, z. B. list.RemoveAll(n => n > 3) Alle Daten größer als 3 werden gelöscht
RemoveAt() : Elemente basierend auf Indizes entfernen
verwenden mit ' ' verwenden ' s ' ' s ' s ' s ' s ' s ' s ' s ' s ' s ' s ‐ Dictionary< ;Tkey,Tvalue>
6. Ein- und Auspacken:
Einpacken: Werttyp--->Referenztyp
Unboxing: Referenztyp--->Werttyp
Welche Art von Karton wird beim Verpacken und welche Art von Karton beim Auspacken verwendet.
7. Kodierungsformat:
Speichern Sie die Zeichenfolge im Binärformat.
ascii 256
6000 GB2312
GBK GB18030
ISO
Der Grund für verstümmelte Zeichen: Die beim Speichern dieser Datei verwendete Codierung stimmt nicht mit dem beim Öffnen dieser Datei verwendeten Codierungsformat überein.
Textdatei: Ziehen Sie sie in txt und Sie können immer noch erkennen, dass es sich um eine Textdatei handelt.
.txt .html .ini .xml
Grundoperationen von Datei: Dateien bearbeiten
Exist(): Bestimmen, ob die angegebene Datei vorhanden ist
Create(): Erstellen
Move(): Ausschneiden Ausschneiden
Copy(): Kopieren
Löschen(): Löschen
Das von ReadAllLines() verwendete Standardkodierungsformat ReadAllText() ist utf-8
Verzeichnis: Die Operation ist der Ordner
CreateDirectory: Einen neuen Ordner erstellen
’ ’ s ’ s ‐ ‐ ‐ ‐ ‐ Löschen: löschen
Directory.getFiles (@"E: DOWNLOAD", "*.avi") Alles abrufen .avi-Datei
GetDirectories (), um alle Ordner im angegebenen Verzeichnis abzurufen
Nur alle aktuellen ersten Verzeichnisse im aktuellen ersten Verzeichnis abzurufen Ordner
Hauptklasse für reguläre Ausdrücke: Regex
ist eine Vorlage. Mit dieser Vorlage können wir die gewünschten Daten in einer Reihe von Zeichenfolgen finden.
Hinweis: Reguläre Ausdrücke arbeiten mit Zeichenfolgen.
Zusammensetzung:
Qualifizierer, Metazeichen, häufig verwendete Ausdrücke
Bestimmen Sie, ob eine Übereinstimmung vorliegt: Regex.IsMatch("String", "Regular Expression");
String-Extraktion: Regex Match("String" , „Regulärer Ausdruck der zu extrahierenden Zeichenfolge“); „Regulär“, „Inhalt ersetzen“);
.+? Entspricht einer großen Anzahl von Zeichen
(?
Greedy-Modus:
"1111.11. 11. 11111. "
Gier: .+. Kombiniere so viele Übereinstimmungen wie möglich
Nicht gierig: .+? . Passen Sie so wenig wie möglich an, 1
Stil: Legen Sie bestimmte Eigenschaften fest, die stapelweise auf das Steuerelement angewendet werden sollen
Vorlage: Legen Sie das darauf basierende Erscheinungsbild des Steuerelements fest
Auslöser:
Um die Eigenschaften zu definieren Vom Trigger-Objekt überwacht, sollten Sie die Trigger.Property-Eigenschaft verwenden.
Um zu definieren, wann das Trigger-Objekt aktiviert wird, sollten Sie die Trigger.Value-Eigenschaft festlegen.
Um die vom Trigger ausgelösten Aktionen zu definieren, sollten Sie festlegen Trigger.Setters-Eigenschaft für Setter Eine Sammlung von Objekten
Animation: Durch Storyboards erstellte Storyboard-Objekte sind im Ressourcenwörterbuch enthalten und müssen über das x:Key-Attribut identifiziert werden
Zeitleiste ohne Keyframes: DoubleAnimation, PointAnimation und ColorAnimation
hängt von Attributen ab: Geben Sie Propdp+Tab-Taste zweimal ein, um die Attributvorlage einzufügen
XML: Extensible Markup Language
Unterschied zu HTML: Elemente in XML müssen geschlossen sein! Attribute von Elementen in XML müssen in Anführungszeichen gesetzt werden
Syntaxspezifikationen: Tag, Nest und Attribute.
Das Label (d. h. Element) muss geschlossen sein, der Attributwert muss von „“ umgeben sein und Labels können ineinander verschachtelt sein.
In XML enthält ein Knoten (Node) ein Element (Element).
Groß-/Kleinschreibung beachten
XML erstellen: DOM Document Object Model
Unterknoten löschen: ITems.RemoveChild(xn);
Attributwerte eines Knotens löschen: xn.Attributes.RemoveNamedItem("Count") ;
Strg+K und S/X, Tastenkombination Tasten zum Einfügen von Codesegmenten/externem Code, z. B. #region
Delegierter Delegat: Verwenden Sie einen Delegaten, um eine Funktion als Parameter zu übergeben
Die Funktion kann direkt sein Die Signatur des Delegaten wird einem Delegatenobjekt zugewiesen muss mit der Signatur der Funktion identisch sein (d. h. der Rückgabewert und der Parametertyp sind konsistent)
DelSayHi del = SayHiChinese;//new DelSayHi(SayHiChinese);
Das Ereignis selbst ist ein sicherer Delegat
Definieren Sie das Ereignis:
öffentlicher Delegat void delTest(); //Bei der Registrierung des Ereignisses ist ein Delegat erforderlich
öffentliches Ereignis delTest eventTest; erforderlich
Ereignis registrieren:
eventTest += new delTest(method1);
Zusammenfassung:
Die Rolle der Delegation:
Platzhalter, falls nicht Wenn Sie den spezifischen Code der Methode kennen, die in Zukunft ausgeführt werden soll, können Sie zunächst eine Delegate-Variable verwenden, um den Methodenaufruf zu ersetzen (der Rückgabewert und die Parameterliste des Delegaten müssen ermittelt werden).
Die Funktion der Ereignis:
Die Funktion des Ereignisses ist dieselbe wie die der Delegate-Variable. Sie ist lediglich funktional eingeschränkter als Delegate-Variablen.
Zum Beispiel: 1. Methoden können nur durch += oder -= gebunden werden, 2. Ereignisse können nur innerhalb der Klasse aufgerufen (ausgelöst) werden.
Vorteile von Assemblys:
Nur notwendige Assemblys werden im Programm referenziert, wodurch die Größe des Programms reduziert wird.
Assemblys können einen Teil des Codes kapseln und nur notwendige Zugriffsschnittstellen bereitstellen.
Cloud: Nur eine große Menge kommerzieller Computerhardware, die in einem Rechenzentrum läuft. Dieses Rechenzentrum kann Programme ausführen und große Datenmengen speichern.
Elastisch, d. h. die Fähigkeit zur dynamischen Erweiterung nach oben (z. B. Erhöhung von Speicher und CPU) und/oder die Fähigkeit zur dynamischen Erweiterung nach außen (Erhöhung der Anzahl virtueller Serverinstanzen)
Cloud-Service-Modell:
2. Platform as a Service (PaaS): Der Wert ist verantwortlich für die Programme und deren Abhängigkeiten, die auf dem ausgewählten Betriebssystem laufen.
3. Software as a Service (SaaS): Ein Softwareprogramm oder Dienst, der auf einem Gerät verwendet wird, auf das über das Internet zugegriffen wird.
Verwandte Empfehlungen:
[c#-Tutorial] C#-Datentypen
Das obige ist der detaillierte Inhalt vonZusammenfassung der klassischen Lernphasen für den Einstieg in C# (chaotisch). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!