La différence entre l'Objet, de la Dynamique et du Var
J'ai besoin de connaître la différence entre ces trois mots-clés Object
, Dynamic
et var
en C#.
J'ai vu cette lien mais je ne comprends pas dans ce cas, je dois les utiliser.
Pouvez-vous expliquer pour moi, s'il vous plaît, la différence entre ces mots-clés ? Quelles sont les utilités de chaque mot-clé?
- Utilisez simplement
var
partout. Si vous besoin de quelque chose d'autre, vous savez que. - Suivez ce lien. Facile à saisir - anglais clair: dotnettricks.com/learn/csharp/...
- merci pour m'aider à comprendre que dynamique est utile lors du codage en utilisant la réflexion ou la dynamique de soutien à la langue ou avec les objets COM, parce que nous avons besoin d'écrire moins de code. Et je trouve aussi Utilisation de Type dynamique (Guide de Programmation C#)-Interop COM
Vous devez vous connecter pour publier un commentaire.
Tout est
Object
c'est un type de base. Chaque type d'hériter deObject
dans un moment, d'un simpleint
variable peut être de la boxe à unobject
. Par exemple:Il est le plus abstraction de tout type et c'est un type de référence. Si vous voulez obtenir le type réel, vous devez
unbox
(à l'aide d'un conversaion de la stratégie, tels que les méthodes, les castes, etc):Dynamic
est une implémentation de l'aspect dynamique en C#, il n'est pas fortement typé. Par exemple:var
est juste un mot clé du langage C# qui permet de définir un objet d'un type puisque vous l'initialiser avec une valeur et il sera de déterminer le type de cette valeur, par exemple:Le compilateur de vérifier le type de la valeur que vous avez définie et fixée sur l'objet.
dynamic
ne change pas le type sous-jacent, afin de l'appelanta.FavouriteFood = "pizza";
jeter une exception lors de l'exécution, parce queClass
ne définit pasFavouriteFood
.Objet:
Chaque objet en C# est dérivé de type d'objet, que ce soit directement ou indirectement. Il est temps de compilation variable et nécessitent boxing et unboxing pour la conversion et il est lent. Vous pouvez changer la valeur de type de type de référence et vice versa.
Var:
Il est temps de compilation variable et ne nécessite pas de boxing et unboxing. Depuis le Var est un moment de la compilation fonctionnalité, tout type de vérification est effectué au moment de la compilation seulement. Une fois la Var a été initialisé, vous ne pouvez pas changer le type qui y est stockée.
Dynamique:
Il est temps d'exécution variable et ne nécessitent pas de boxing et unboxing. Vous pouvez attribuer et de la valeur de dynamique et peut changer de type de la valeur stockée dans le même. Toutes les erreurs sur la dynamique peut être découvert au moment de l'exécution seulement. Nous pouvons aussi dire que dynamique est un moment de l'exécution de l'objet qui peut contenir tout type de données.
1)
var
est utilisé pour les implicites de la définition de type. Par exemple, si vous définissez une variable comme ceci:Compilateur déduit le type basé sur la valeur assignée et votre variable initialisée comme un entier dans moment de la compilation. Après cette définition, vous ne pouvez pas affecter un
string
à votre variable parce que c'est un entier.Et vous ne pouvez pas utiliservar
comme ceci:Parce que vous devez attribuer quelque chose à votre variable si vous utilisez
var
mot-clé, de sorte que le type peut être déterminée.2)
Object
est une classe de base pour toutes les classes. DansC#
toutes les classes héritent de la classe d'objet, donc vous pouvez affecter tout à un objet.Par exemple:Ce travail est parce que quand tu fais ce boxing/unboxing effectuer automatiquement pour vous. Et contrairement à
var
mot-clé, vous pouvez utiliserobject
comme ceci:3)
dynamic
est une fonctionnalité intéressante qui est venu avecC# 4.0
, vous pouvez utiliserdynamic
si vous ne savez pas de retourner le type de votre fonction au moment de la compilation.Votre type sera déterminé enrun-time
.Par conséquent, vous ne pouvez pas utiliser intellisense avec des variables dynamiques.Vous pouvez utiliser dynamiques comme ceci:
Mais vous devez être prudent lorsque vous utilisez dynamique.Parce que si vous appelez une méthode ou une propriété qui n'existe pas, vous obtiendrez un
RuntimeBinderException
dans l'exécution.Et la dernière chose que je veux mentionner,
dynamic
etobject
peut être le type de paramètre, maisvar
ne le peuvent pas. Par exemple, vous pouvez faire ceci:Mais vous ne pouvez pas faire ceci:
Parce que
var
n'est pas un type plutôt c'est un sucre syntaxique pour permettre au compilateur de déduire le type pour vous.Object
est la classe racine de tous .net les objets dérivent.var
est utilisé comme un raccourci, si vous ne voulez pas écrire direstring x = "a"
, mais au lieu d'écrirevar x = "a"
. Il ne fonctionne que si le compilateur ne peut comprendre ce que vous entendez.dynamic
implique que ce que vous faites avec l'objet n'est que evaulated au moment de l'exécution (x.StrangeMethod()
ne sera pas provoquer une erreur de compilation, même si la méthode n'existe pas), utile lors de l'interaction avec les langages de script.C'est assez simple...
Objet est un type de base en .NET. Tous les autres types héritent de celui-ci. Si une variable de type d'objet peut tout contenir. Mais il doit être effectué seulement il n'y a pas d'autres options, pour les raisons suivantes:
Avant de lire/écrire à cette variable, nous avons à faire unboxing/boxe opérations, qui sont coûteux.
Compilateur ne peut pas faire de ce type de vérification au moment de la compilation qui peut entraîner des bugs et des exceptions au moment de l'exécution. Par exemple, ce code sera compilé avec succès, mais jeter une exception au moment de l'exécution:
Var n'est pas un type, mais l'instruction pour le compilateur de conclure un type de variable à partir du contexte du programme. Il a besoin de méthodes anonymes, mais aussi peut être utilisé partout où vous voulez. Méfiez-vous seulement de votre programme de ne pas devient difficile à lire. Le compilateur rend sa décision au moment de la compilation de sorte qu'il ne sera pas de toute influence sur l'efficacité du programme.
Dynamique – est un type spécial pour lequel le compilateur ne pas faire de ce type de vérification au moment de la compilation. Le type est spécifié au moment de l'exécution par le CLR. C'est statique (!) type et d'après le type de variable est spécifié, il ne peut pas être modifié ultérieurement. Nous devrions utiliser ce type seulement il n'y a pas d'autres options pour des raisons similaires à type d'objet:
Il y a une opération d'addition d'indiquer le type au moment de l'exécution, ce qui réduit l'efficacité du programme.
Compilateur n'effectue pas de vérification de type qui peut entraîner des bugs et des exceptions au moment de l'exécution.
Suivantes sont la différence entre le Système.Objet , dynamique et var.
Tout .net est dérivé à partir du Système.Type d'objet. Mais si vous cherchez spécifiques différence, ici, sont-ils.
Différence entre l'Objet et dynamique.
1.Vous ne pouvez pas implicitement convertie en une variable de type Objet dans n'importe quel autre type. Compilateur ne vous permettra pas de le faire. D'autre part, vous
peut implicitement convertie en un type de dynamique. Le compilateur va pas se plaindre
parce que la coulée sera effectué au moment de l'exécution et de l'exception, le cas
requis seront soulevées lors de l'exécution.
2.Parce que la dynamique est la même que l'objet, Vous ne pouvez pas écrire des méthodes surchargées, qui diffèrent dans l'Objet et dynamique dans les arguments.
Différence entre la dynamique et le var.
1.Déclaration d'une variable locale dynamique ou var a seulement syntaxique différence.
2. Vous ne pouvez pas déclarer une variable de type var sans l'initialiser, Mais vous pouvez le faire que pour une variable dynamique
3. Vous ne pouvez pas utiliser une variable var de passer comme argument de méthode ou de retour d'une méthode.
4. Vous ne pouvez attribuer une expression de var, mais vous pouvez le faire pour une variable dynamique.
Objet
Objet de Base de .net, la plupart du temps vous n'aurez pas besoin de l'utiliser.
Var
Juste un sucre syntaxique, chaque fois que vous utilisez var, le type de variable serait décidé au moment de la compilation, selon la valeur qui lui est assignée.
Dynamique
Vient de la DLR partie de .net, vous n'aurez besoin lorsque vous souhaitez utiliser un non type fort frappe.
Un résumé de la différence entre l'Objet, le Var, et de type Dynamique. Dans le cas où vous ne comprenez pas les concepts dans chaque ligne de la table de la cellule, veuillez consulter ailleurs. Source: https://www.dotnettricks.com/learn/csharp/differences-between-object-var-and-dynamic-type
compilateur dit le var est contextuelle mot-clé utilisé pour la déclaration de la variable. c'est pourquoi nous avons besoin d'affecter une valeur au moment de la déclaration. le compilateur vérifie leur type et de le traiter de la même manière. De cette façon, le compilateur sait tout sur cette variable et implique de sécurité de type sur elle.