Maison développement back-end Tutoriel C#.Net Explication détaillée des objets anonymes, var et type dynamique dynamique en C#

Explication détaillée des objets anonymes, var et type dynamique dynamique en C#

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

Avec le développement du C#, le contenu du langage continue de s'enrichir, le développement devient plus pratique et plus rapide, et la netteté du C# se révèle sans aucun doute. Le langage C# est un langage fortement typé depuis sa naissance. Cette nature n'a pas changé aujourd'hui, et je pense qu'elle ne changera pas dans le futur. Puisqu'il s'agit d'un langage fortement typé, l'écriture de n'importe quel programme nécessite de remplir les conditions de base suivantes :

1 La déclaration de variable doit indiquer son type

2. , son type doit être spécifié. Le type ne peut pas être modifié au moment de l'exécution

Le code est le suivant :

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

Cependant, dans le développement réel, nous sommes souvent confrontés aux problèmes courants suivants. :

1. Dans un programme plus vaste, seulement un ou quelques endroits (pas plus de 3 endroits) doivent utiliser un ou plusieurs types (comme Student ci-dessus), et ces types ne sont plus nécessaires dans d'autres endroits. Pour déclarer un type Student séparément, la quantité de code requise peut dépasser la quantité de code lors de l'utilisation de ce type, et le rapport investissement/production n'est pas rentable.

2. Dans un programme, seuls certains attributs ou méthodes d'un certain type d'objet sont requis pour participer à l'opération. Dans ce cas, la conversion temporaire de ce type d'objet en un objet doté de certaines des propriétés et méthodes requises par le programme peut rendre le programme plus rationalisé.

3. Autres situations... Je n'ai pas encore remarqué... Bienvenue pour ajouter...

Le développement actuel de C# ci-dessus Il existe des solutions relativement bonnes aux problèmes courants dans le développement JavaScript , comme suit :

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

Si vous n'êtes pas familier avec la syntaxe js ci-dessus, vous pouvez aller sur Baidu pour rechercher "syntaxe json" et je vous dirai que c'est très simple (et c'est. important).

Objet anonyme (type anonyme)

Par conséquent, C# a absorbé les avantages grammaticaux du langage de script JavaScript dans la version 3.0 et a effectué les mises à niveau correspondantes vers C# pour le rendre également This la syntaxe est prise en charge (C# est toujours un langage fortement typé). L'exemple de code est le suivant :

static void Main(string[] args)
{     new {Name="张三",Age=20,Like="LOL"};
}
Copier après la connexion

Le code C# ci-dessus utilise le nouveau mot-clé pour indiquer au compilateur de créer un objet. L'objet a trois attributs : Nom, Âge et Like =. la valeur correspondant à l'attribut. De cette façon, on évite "La création d'un objet doit d'abord avoir les contraintes du type d'objet", Ainsi, lors du processus de développement, on n'a plus besoin de créer des classes séparées pour les types les moins utilisés, les problèmes mentionnés au-dessus de 1 a été résolu .

L'objet créé n'a désormais aucun type spécifique spécifié, il est donc appelé objet anonyme.

Var apparaît

Maintenant, pour utiliser un objet anonyme, vous devez utiliser une variable pour le référencer. Bien que nous ne spécifions pas le type d'objet lors de sa création, le compilateur nous aidera à créer un type avec des propriétés et des méthodes associées pendant le processus de compilation. Le nom du type compilé à ce moment est généré de manière aléatoire, le type de variable ne peut donc pas être déterminé. Un exemple est le suivant :

static void Main(string[] args)
{    //XXX为类型声明    //x为引用变量 
     XXX x = new {Name="张三",Age=20,Like="LOL"};
}
Copier après la connexion

Bien que nous ne connaissions pas le nom du type généré par le compilateur, nous pouvons laisser le compilateur déduire le type de variable en fonction des résultats de la compilation. Le mot-clé var entre en jeu à ce moment :

static void Main(string[] args)
{     var x = new {Name="张三",Age=20,Like="LOL"};
}
Copier après la connexion

Le mot-clé var indique que le type de , comme indiqué ci-dessous :

Remarques sur l'utilisation de var :

1. var ne peut déclarer que des variables locales dans une méthode

2. déclaré par var est déterminé après qu'une valeur lui ait été attribuée. Les valeurs d'autres types ne peuvent pas être attribuées dans les programmes suivants

3. var x = new object() n'a aucun sens, ne le faites pas. t écrire un tel code.............

Désormais, avec la prise en charge des objets anonymes et des types déduits var, nous pouvons gérer problème 2 mentionné ci-dessus. L'exemple de code est le suivant :

        static void Main(string[] args)
        {            
        var x = new { Name = "张三", Age = 20, Like = "LOL" };            
        var s = new { Name = x.Name, Age = x.Age };  
        }
Copier après la connexion

Ce qui précède n'est qu'un exemple. Si vous êtes familier avec Linq ou Entity Framework, l'utilisation correspondant à la question 2 sera écrasante...

<🎜. >

Le type dynamique apparaît

L'utilisation des types anonymes est généralement limitée à la partie de la méthode, qui peut être comprise comme

: définie au fur et à mesure de votre utilisation, et disparaît après utiliser. Que devez-vous faire dans les situations suivantes ?


        static void Main(string[] args)
        {            
        var x = GetObject(); 
        }        
        private static XXX GetObject()
        {            
        return new { Name = "张三", Age = 20, Like = "LOL" };
        }
Copier après la connexion
Renvoie un objet anonyme via la méthode GetObject, de sorte que le nom du type de valeur de retour de la méthode ne peut pas être déterminé et est temporairement remplacé par XXX ici. Dans ce cas, le type de retour n'est pas défini et peut être spécifié à l'aide de Dynamic . Comme suit :

          Main( x =    { Name = , Age = , Like =
Copier après la connexion
À ce stade, il n'y aura aucune erreur de syntaxe dans la méthode et le programme pourra être compilé et exécuté avec succès. Alors, que fait exactement Dynamic pour que le programme ci-dessus soit compilé avec succès ?

Le rôle de la dynamique :

1. Dynamic représente le type dynamique La signification du type dynamique est que le type est incertain lors des étapes d'écriture et de compilation du programme, les propriétés ou les attributs. des objets pertinents sont déterminés par la méthode de réflexion. Par conséquent, la vérification de la syntaxe n’est pas effectuée pendant la phase d’écriture.

2. Dynamic peut être utilisé pour déclarer des champs, des attributs, des paramètres de méthode et des valeurs de retour de méthode

3 Dynamic ne prend pas en charge les invites intelligentes car vous ne pouvez pas savoir ce qu'est la dynamique lorsque vous le faites. écrire du code (réflexion)

Les variables déclarées dynamiques peuvent être comprises comme des variables de type objet. Par conséquent, il est correct d'attribuer n'importe quel type de valeur à une variable dynamique. Cependant, lors de l'utilisation d'une variable pour obtenir une valeur de propriété ou appeler une méthode (le programme doit être dans l'état Runtime à ce moment), le CLR vérifiera (. réflexion) que la propriété ou la méthode appelée existe, aucune exception d'exécution n'est signalée.

la dynamique est utilisée partout dans le développement Web Asp.net Mvc Bien que cela semble compliqué, l'essentiel est ce qui est mentionné ci-dessus.

Explication :

var et Dynamic peuvent sembler avoir des fonctions similaires, mais elles sont différentes :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment changer le type de réseau en privé ou public dans Windows 11 Comment changer le type de réseau en privé ou public dans Windows 11 Aug 24, 2023 pm 12:37 PM

La configuration d'un réseau sans fil est courante, mais choisir ou modifier le type de réseau peut prêter à confusion, surtout si vous n'en connaissez pas les conséquences. Si vous recherchez des conseils sur la façon de changer le type de réseau de public à privé ou vice versa dans Windows 11, lisez la suite pour obtenir des informations utiles. Quels sont les différents profils réseau dans Windows 11 ? Windows 11 est livré avec un certain nombre de profils réseau, qui sont essentiellement des ensembles de paramètres pouvant être utilisés pour configurer diverses connexions réseau. Ceci est utile si vous disposez de plusieurs connexions à la maison ou au bureau afin que vous n'ayez pas à tout configurer à chaque fois que vous vous connectez à un nouveau réseau. Les profils de réseau privé et public sont deux types courants dans Windows 11, mais généralement

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM May 06, 2024 pm 04:43 PM

Le développement des technologies d’intelligence artificielle (IA) bat son plein aujourd’hui et elles ont montré un grand potentiel et une grande influence dans divers domaines. Aujourd'hui, Dayao partagera avec vous 4 cadres de projets liés au modèle d'IA open source .NET LLM, dans l'espoir de vous fournir une référence. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel est un kit de développement logiciel (SDK) open source conçu pour intégrer de grands modèles de langage (LLM) tels qu'OpenAI, Azure

Quelles sont les perspectives d'emploi du C# ? Quelles sont les perspectives d'emploi du C# ? Oct 19, 2023 am 11:02 AM

Que vous soyez débutant ou professionnel expérimenté, la maîtrise du C# ouvrira la voie à votre carrière.

Comment créer un compte matriciel vidéo ? De quels types de comptes matriciels dispose-t-il ? Comment créer un compte matriciel vidéo ? De quels types de comptes matriciels dispose-t-il ? Mar 21, 2024 pm 04:57 PM

Avec la popularité des plateformes de vidéos courtes, le marketing de compte matriciel vidéo est devenu une méthode de marketing émergente. En créant et en gérant plusieurs comptes sur différentes plateformes, les entreprises et les particuliers peuvent atteindre des objectifs tels que la promotion de la marque, la croissance des fans et la vente de produits. Cet article explique comment utiliser efficacement les comptes matriciels vidéo et présente différents types de comptes matriciels vidéo. 1. Comment créer un compte vidéo matriciel ? Pour créer un bon compte Video Matrix, vous devez suivre les étapes suivantes : Tout d'abord, vous devez clarifier quel est l'objectif de votre compte Video Matrix, qu'il s'agisse de la communication de la marque, de la croissance des fans ou de la vente de produits. Avoir des objectifs clairs aide à développer des stratégies en conséquence. 2. Choisissez une plateforme : choisissez une plateforme de courtes vidéos appropriée en fonction de votre public cible. Les plateformes de courtes vidéos grand public actuelles incluent Douyin, Kuaishou, Huoshan Video, etc.

Implémentation de tableaux dynamiques en Python : du débutant au compétent Implémentation de tableaux dynamiques en Python : du débutant au compétent Apr 21, 2023 pm 12:04 PM

Partie 1 Parlons de la nature des types de séquence Python. Dans ce blog, parlons des différentes classes « séquence » de Python et des trois structures de données intégrées couramment utilisées – liste, tuple et caractère. ). Je ne sais pas si vous l'avez remarqué, mais ces classes ont un point commun évident. Elles peuvent être utilisées pour enregistrer plusieurs éléments de données. La fonction la plus importante est la suivante : chaque classe prend en charge l'accès en indice (index) aux éléments de la séquence. comme l'utilisation de SyntaxSeq[i]​. En fait, chacune des classes ci-dessus est représentée par une structure de données simple telle qu'un tableau. Cependant, les lecteurs familiers avec Python savent peut-être que ces trois structures de données présentent certaines différences : par exemple, les tuples et les chaînes ne peuvent pas être modifiés, alors que les listes le peuvent.

Quel est le type de valeur de retour de la fonction Golang ? Quel est le type de valeur de retour de la fonction Golang ? Apr 13, 2024 pm 05:42 PM

Les fonctions Go peuvent renvoyer plusieurs valeurs de types différents. Le type de valeur de retour est spécifié dans la signature de la fonction et renvoyé via l'instruction return. Par exemple, une fonction peut renvoyer un entier et une chaîne : funcgetDetails()(int,string). En pratique, une fonction qui calcule l'aire d'un cercle peut renvoyer l'aire et une erreur facultative : funccircleArea(radiusfloat64)(float64,error). Remarque : Si la signature de la fonction ne spécifie pas de type, une valeur nulle est renvoyée ; il est recommandé d'utiliser une instruction return avec une déclaration de type explicite pour améliorer la lisibilité.

Meilleures pratiques pour les astuces de type en Python Meilleures pratiques pour les astuces de type en Python Apr 23, 2023 am 09:28 AM

C'est génial d'utiliser un langage dynamique pendant un moment, et le code est reconstruit dans le crématorium. Je pense que vous devez avoir entendu cette phrase. Comme les tests unitaires, même si l'écriture du code prend un peu de temps, cela en vaut la peine à long terme. Cet article explique comment mieux comprendre et utiliser les astuces de type Python. 1. Les astuces de type ne sont valides qu'au niveau de la syntaxe. Les astuces de type (introduites depuis PEP3107) sont utilisées pour ajouter des types aux variables, paramètres, paramètres de fonction et leurs valeurs de retour, propriétés de classe et méthodes. Les types de variables Python sont dynamiques et peuvent être modifiés au moment de l'exécution pour ajouter des indications de type au code. Ils ne sont pris en charge qu'au niveau de la syntaxe et n'ont aucun impact sur l'exécution du code. Donc le type

Types et caractéristiques des fonctions C++ Types et caractéristiques des fonctions C++ Apr 11, 2024 pm 03:30 PM

Les fonctions C++ ont les types suivants : fonctions simples, fonctions const, fonctions statiques et fonctions virtuelles ; les fonctionnalités incluent : les fonctions en ligne, les paramètres par défaut, les retours de référence et les fonctions surchargées. Par exemple, la fonction calculateArea utilise π pour calculer l'aire d'un cercle d'un rayon donné et la renvoie en sortie.

See all articles