Heim Backend-Entwicklung C#.Net-Tutorial Ausführliche Erklärung anonymer Objekte, var und dynamischer dynamischer Typen in C#

Ausführliche Erklärung anonymer Objekte, var und dynamischer dynamischer Typen in C#

Sep 06, 2017 pm 01:53 PM
.net 类型

Mit der Entwicklung von C# wird der Inhalt der Sprache weiter bereichert, die Entwicklung wird bequemer und schneller und die Schärfe von C# wird zweifellos deutlich. Die C#-Sprache ist seit ihrer Geburt eine stark typisierte Sprache. Diese Natur hat sich heute nicht geändert, und ich denke, dass sie sich auch in Zukunft nicht ändern wird. Da es sich um eine stark typisierte Sprache handelt, muss das Schreiben eines Programms die folgenden Grundbedingungen erfüllen:

1 Die Variablendeklaration muss ihren Typ angeben

2 , sein Typ muss zur Laufzeit angegeben werden.

Der Code lautet wie folgt:

    public  class Student
    {        
    public string Name { get; set; }        
    public int Age { get; set; }        
    public string Like { get; set; }
    }
Nach dem Login kopieren
static void Main(string[] args)
{    int a = 10;    string s = "abc";
    Student student = new Student();    //下面出现编译错误,变量类型在声明后无法再变更
    s = a;
    student = s;
    a = 10.1f;
}
Nach dem Login kopieren

In der tatsächlichen Entwicklung treten jedoch häufig die folgenden häufigen Probleme auf :

1. In einem größeren Programm müssen nur eine oder wenige Stellen (nicht mehr als 3 Stellen) einen oder mehrere bestimmte Typen verwenden (z. B. Student oben), und diese Typen werden in nicht mehr benötigt andere Orte. Um einen Student-Typ separat zu deklarieren, kann die erforderliche Codemenge die bei Verwendung dieses Typs erforderliche Codemenge überschreiten und das Investitions-Output-Verhältnis ist nicht kosteneffektiv.

2. In einem Programm sind nur einige Attribute oder Methoden eines bestimmten Objekttyps erforderlich, um an der Operation teilzunehmen. In diesem Fall kann die vorübergehende Konvertierung dieses Objekttyps in ein Objekt mit einigen der für das Programm erforderlichen Eigenschaften und Methoden das Programm rationalisieren.

3. Andere Situationen... Ich habe es noch nicht bemerkt... Willkommen zum Hinzufügen...

Die oben genannte tatsächliche Entwicklung von C# Es gibt relativ gute Lösungen für häufige Probleme in der JavaScript-Entwicklung , wie folgt:

//在此处js中需要模拟一个学生对象
student = {"name":"张三","age":20,"like":"LOL"};
//在此处js中需要模拟一个老师对象
teacher = {"name":"李老师","like":"没收学生手机,自己LOL"};
//此处需要将学生student转换成只有name和age的对象
person = {"name":student.name,"age":student.age};
Nach dem Login kopieren

Wenn Sie mit der oben genannten js-Syntax nicht vertraut sind, können Sie zu Baidu gehen, um nach „json-Syntax“ zu suchen, und ich werde Ihnen sagen, dass es sehr einfach ist (und das ist es auch). wichtig).

Anonymes Objekt (anonymer Typ)

Daher hat C# in Version 3.0 die grammatikalischen Vorteile der JavaScript-Skriptsprache übernommen und entsprechende Upgrades an C# vorgenommen, um es auch so zu machen Syntax wird unterstützt (C# ist immer noch eine stark typisierte Sprache). Der Beispielcode lautet wie folgt:

static void Main(string[] args)
{     new {Name="张三",Age=20,Like="LOL"};
}
Nach dem Login kopieren

Der obige C#-Code verwendet das Schlüsselwort new, um den Compiler anzuweisen, ein Objekt zu erstellen: Name, Alter und „Gefällt mir“ gefolgt von der Wert, der dem Attribut entspricht. Auf diese Weise vermeiden wir „Bei der Erstellung eines Objekts müssen zunächst die Einschränkungen des Objekttyps gelten“, Daher müssen wir während des Entwicklungsprozesses keine separaten Klassen mehr für weniger verwendete Typen erstellen, die genannten Probleme oben 1 wurde gelöst .

Das jetzt erstellte Objekt gibt keinen bestimmten Typ an, daher wird es anonymes Objekt genannt.

Var erscheint

Um nun ein anonymes Objekt zu verwenden, müssen Sie eine Variable verwenden, um darauf zu verweisen. Obwohl wir beim Erstellen nicht den Typ des Objekts angeben, hilft uns der Compiler beim Erstellen eines Typs mit zugehörigen Eigenschaften und Methoden während des Kompilierungsprozesses. Der zu diesem Zeitpunkt kompilierte Typname wird zufällig generiert, sodass der Variablentyp nicht bestimmt werden kann. Ein Beispiel lautet wie folgt:

static void Main(string[] args)
{    //XXX为类型声明    //x为引用变量 
     XXX x = new {Name="张三",Age=20,Like="LOL"};
}
Nach dem Login kopieren

Obwohl wir den vom Compiler generierten Typnamen nicht kennen, können wir den Compiler den Variablentyp basierend auf den Kompilierungsergebnissen ableiten lassen. Das Schlüsselwort var kommt zu diesem Zeitpunkt ins Spiel:

static void Main(string[] args)
{     var x = new {Name="张三",Age=20,Like="LOL"};
}
Nach dem Login kopieren

Das Schlüsselwort var gibt den Typ von an, wie unten gezeigt:

Hinweise zur Verwendung von var:

1 var kann nur lokale Variablen innerhalb einer Methode deklarieren

2 Die von var deklarierte Deklaration wird nach der Zuweisung bestimmt, und andere Wertetypen können in nachfolgenden Programmen nicht zugewiesen werden

3. var x = new object() ist bedeutungslos, nicht wahr Schreiben Sie solchen Code....

Jetzt mit der Unterstützung für anonyme Objekte und var-abgeleitete Typen können wir Problem 2 lösen oben erwähnt. Der Beispielcode lautet wie folgt:

        static void Main(string[] args)
        {            
        var x = new { Name = "张三", Age = 20, Like = "LOL" };            
        var s = new { Name = x.Name, Age = x.Age };  
        }
Nach dem Login kopieren

Das Obige ist nur ein Beispiel. Wenn Sie mit Linq oder Entity Framework vertraut sind, wird die Verwendung entsprechend Frage 2 überwältigend sein...

Dynamische Typdynamik erscheint

Die Verwendung anonymer Typen ist im Allgemeinen auf den Teil der Methode beschränkt, der als verstanden werden kann: definiert, wie Sie ihn verwenden, und verschwindet danach verwenden. Was sollten Sie in den folgenden Situationen tun?


        static void Main(string[] args)
        {            
        var x = GetObject(); 
        }        
        private static XXX GetObject()
        {            
        return new { Name = "张三", Age = 20, Like = "LOL" };
        }
Nach dem Login kopieren

Gibt ein anonymes Objekt über die GetObject-Methode zurück, sodass der Name des Methodenrückgabewerttyps nicht ermittelt werden kann und hier vorübergehend durch XXX ersetzt wird. In diesem Fall ist der Rückgabetyp undefiniert und kann mit „dynamic“ angegeben werden. Wie folgt:

          Main( x =    { Name = , Age = , Like =
Nach dem Login kopieren

Zu diesem Zeitpunkt liegen keine Syntaxfehler in der Methode vor und das Programm kann erfolgreich kompiliert und ausgeführt werden. Was genau macht Dynamic also, damit das obige Programm erfolgreich kompiliert wird?

Die Rolle des dynamischen Typs:

1. Der dynamische Typ bedeutet, dass der Typ während der Programmschreib- und Kompilierungsphase unsicher ist der relevanten Objekte werden durch den Reflexionsmechanismus bestimmt. Daher wird während der Schreibphase keine Syntaxprüfung durchgeführt.

2. Dynamic kann zum Deklarieren von Feldern, Attributen, Methodenparametern und Methodenrückgabewerten verwendet werden.

3 Dynamic unterstützt keine intelligenten Eingabeaufforderungen, da Sie nicht wissen können, was Dynamic ist, wenn Sie es tun Code schreiben (Reflexion)

Dynamisch deklarierte Variablen können als Objekttypvariablen verstanden werden. Daher ist es korrekt, einer dynamischen Variablen jede Art von Wert zuzuweisen. Wenn Sie jedoch eine Variable verwenden, um einen Eigenschaftswert zu erhalten oder eine Methode aufzurufen (das Programm muss sich zu diesem Zeitpunkt im Laufzeitstatus befinden), prüft die CLR (. Reflexion) Unabhängig davon, ob die aufgerufene Eigenschaft oder Methode vorhanden ist, wird keine Laufzeitausnahme gemeldet.

dynamisch wird überall in der Asp.net Mvc-Webentwicklung verwendet. Obwohl es kompliziert aussieht, ist das Wesentliche das, was oben erwähnt wurde.

Erklärung:

Var und Dynamic scheinen ähnliche Funktionen zu haben, aber sie sind unterschiedlich:

  var dynamic
 声明字段  ×  √
 局部变量  √  √
 方法参数类型  ×  √
 方法返回值类型  ×  √

Das obige ist der detaillierte Inhalt vonAusführliche Erklärung anonymer Objekte, var und dynamischer dynamischer Typen in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So ändern Sie den Netzwerktyp in Windows 11 in „Privat' oder „Öffentlich'. So ändern Sie den Netzwerktyp in Windows 11 in „Privat' oder „Öffentlich'. Aug 24, 2023 pm 12:37 PM

Das Einrichten eines drahtlosen Netzwerks ist üblich, aber die Auswahl oder Änderung des Netzwerktyps kann verwirrend sein, insbesondere wenn Sie die Konsequenzen nicht kennen. Wenn Sie Ratschläge dazu suchen, wie Sie den Netzwerktyp in Windows 11 von öffentlich auf privat oder umgekehrt ändern können, lesen Sie weiter, um einige nützliche Informationen zu erhalten. Was sind die verschiedenen Netzwerkprofile in Windows 11? Windows 11 verfügt über eine Reihe von Netzwerkprofilen, bei denen es sich im Wesentlichen um Einstellungssätze handelt, mit denen verschiedene Netzwerkverbindungen konfiguriert werden können. Dies ist nützlich, wenn Sie zu Hause oder im Büro über mehrere Verbindungen verfügen, sodass Sie nicht jedes Mal alles neu einrichten müssen, wenn Sie eine Verbindung zu einem neuen Netzwerk herstellen. Private und öffentliche Netzwerkprofile sind zwei gängige Typen in Windows 11, aber im Allgemeinen

Wie sind die Berufsaussichten von C#? Wie sind die Berufsaussichten von C#? Oct 19, 2023 am 11:02 AM

Ganz gleich, ob Sie Anfänger oder erfahrener Profi sind: Die Beherrschung von C# ebnet den Weg für Ihre Karriere.

Dynamische Arrays in Python implementieren: vom Anfänger bis zum Experten Dynamische Arrays in Python implementieren: vom Anfänger bis zum Experten Apr 21, 2023 pm 12:04 PM

Teil 1 Lassen Sie uns über die Natur der Python-Sequenztypen sprechen. In diesem Blog sprechen wir über die verschiedenen „Sequenz“-Klassen und die drei häufig verwendeten integrierten Datenstrukturen – Liste, Tupel und Zeichen ). Ich weiß nicht, ob Sie es bemerkt haben, aber diese Klassen haben eine offensichtliche Gemeinsamkeit. Sie können zum Speichern mehrerer Datenelemente verwendet werden. Die wichtigste Funktion ist: Jede Klasse unterstützt den Indexzugriff (Index) auf die Elemente der Sequenz. wie zum Beispiel die Verwendung von SyntaxSeq[i]​. Tatsächlich wird jede der oben genannten Klassen durch eine einfache Datenstruktur wie ein Array dargestellt. Leser, die mit Python vertraut sind, wissen jedoch möglicherweise, dass diese drei Datenstrukturen einige Unterschiede aufweisen: Tupel und Zeichenfolgen können beispielsweise nicht geändert werden, Listen hingegen schon.

Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks Teilen Sie mehrere .NET-Open-Source-KI- und LLM-bezogene Projekt-Frameworks May 06, 2024 pm 04:43 PM

Die Entwicklung von Technologien der künstlichen Intelligenz (KI) ist heute in vollem Gange und sie haben in verschiedenen Bereichen großes Potenzial und Einfluss gezeigt. Heute wird Dayao Ihnen 4 .NET Open-Source-KI-Modell-LLM-bezogene Projekt-Frameworks vorstellen und hofft, Ihnen einige Referenzen zu geben. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ist ein Open-Source-Softwareentwicklungskit (SDK), das für die Integration großer Sprachmodelle (LLM) wie OpenAI und Azure entwickelt wurde

Wie erstelle ich ein Videomatrix-Konto? Welche Arten von Matrixkonten gibt es? Wie erstelle ich ein Videomatrix-Konto? Welche Arten von Matrixkonten gibt es? Mar 21, 2024 pm 04:57 PM

Mit der Beliebtheit von Kurzvideoplattformen ist Video-Matrix-Account-Marketing zu einer aufstrebenden Marketingmethode geworden. Durch die Erstellung und Verwaltung mehrerer Konten auf verschiedenen Plattformen können Unternehmen und Einzelpersonen Ziele wie Markenwerbung, Fanwachstum und Produktverkäufe erreichen. In diesem Artikel wird erläutert, wie Sie Video-Matrix-Konten effektiv nutzen und verschiedene Arten von Video-Matrix-Konten vorgestellt. 1. Wie erstelle ich ein Videomatrix-Konto? Um ein gutes Video-Matrix-Konto zu erstellen, müssen Sie die folgenden Schritte befolgen: Zunächst müssen Sie klären, was das Ziel Ihres Video-Matrix-Kontos ist, sei es für die Markenkommunikation, das Fanwachstum oder den Produktverkauf. Klare Ziele helfen dabei, entsprechende Strategien zu entwickeln. 2. Wählen Sie eine Plattform: Wählen Sie eine geeignete Kurzvideoplattform basierend auf Ihrer Zielgruppe. Zu den aktuellen Mainstream-Kurzvideoplattformen gehören Douyin, Kuaishou, Huoshan Video usw.

Was ist die Art des Rückgabewerts der Golang-Funktion? Was ist die Art des Rückgabewerts der Golang-Funktion? Apr 13, 2024 pm 05:42 PM

Go-Funktionen können mehrere Werte unterschiedlichen Typs zurückgeben. Der Rückgabewerttyp wird in der Funktionssignatur angegeben und über die Return-Anweisung zurückgegeben. Beispielsweise kann eine Funktion eine Ganzzahl und einen String zurückgeben: funcgetDetails()(int,string). In der Praxis kann eine Funktion, die die Fläche eines Kreises berechnet, die Fläche und einen optionalen Fehler zurückgeben: funccircleArea(radiusfloat64)(float64,error). Hinweis: Wenn die Funktionssignatur keinen Typ angibt, wird ein Nullwert zurückgegeben. Zur Verbesserung der Lesbarkeit wird empfohlen, eine Return-Anweisung mit einer expliziten Typdeklaration zu verwenden.

Best Practices für Typhinweise in Python Best Practices für Typhinweise in Python Apr 23, 2023 am 09:28 AM

Es ist großartig, eine Zeit lang dynamische Sprache zu verwenden, und der Code wird im Krematorium rekonstruiert. Ich glaube, Sie müssen diesen Satz gehört haben. Obwohl das Schreiben von Code ein wenig Zeit in Anspruch nimmt, lohnt es sich auf lange Sicht sehr. In diesem Artikel erfahren Sie, wie Sie die Typhinweise von Python besser verstehen und verwenden können. 1. Typhinweise sind nur auf Syntaxebene gültig (eingeführt seit PEP3107) und werden zum Hinzufügen von Typen zu Variablen, Parametern, Funktionsparametern und deren Rückgabewerten, Klasseneigenschaften und Methoden verwendet. Die Variablentypen von Python sind dynamisch und können zur Laufzeit geändert werden, um Typhinweise zum Code hinzuzufügen. Dies wird nur auf Syntaxebene unterstützt und hat keinen Einfluss auf die Ausführung des Codes . Daher der Typ

C++-Funktionstypen und -merkmale C++-Funktionstypen und -merkmale Apr 11, 2024 pm 03:30 PM

C++-Funktionen haben die folgenden Typen: einfache Funktionen, konstante Funktionen, statische Funktionen und virtuelle Funktionen; zu den Funktionen gehören: Inline-Funktionen, Standardparameter, Referenzrückgaben und überladene Funktionen. Beispielsweise verwendet die Funktion „calculeArea“ π, um die Fläche eines Kreises mit einem bestimmten Radius zu berechnen und gibt sie als Ausgabe zurück.

See all articles