Différence entre objet, dynamique et 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 ce lien mais je ne comprends pas dans ce cas, je dois les utiliser.

pouvez-vous m'expliquer, s'il vous plaît, la différence entre ces mots clés ? Quelles sont les utilités de chaque mot-clé?

25
demandé sur Stephen Kennedy 2014-01-13 01:12:29

8 réponses

Tout est Object c'est un type de base. Chaque type hérite de Object en un instant, un simple int variable peut être de la boxe à un object. Par exemple:

object a = 10; // int
object b = new Customer(); // customer object
object c = new Product(); // product object
object d = "Jon"; // string
object e = new { Name = "Felipe", Age = 20 }; // anonymous type

C'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):

object a = "Some Text";
string text = a.ToString();

// call a string method
text = text.ToUpper();

object i = 10; // declared as object but instance of int
int intValue = (int) i; //declare as an int ... typed

Dynamic est une implémentation de l'aspect dynamique en C#, il n'est pas fortement typé. Par exemple:

dynamic a = new Class();
a.Age = 18;
a.Name = "Jon";
a.Product = new Product();

a.Name; // read a string
a.Age; // read an int
a.Product.Name; // read a property
a.Product.MoveStock(-1); // call a method from Product property.

var est juste un mot-clé du langage C# qui vous permet de définir n'importe quel objet d'un type puisque vous l'initialisez avec une valeur et il va déterminer le type à partir de cette valeur, par exemple:

var a = 10; // int
var b = 10d; // double
var c = "text"; // string
var p = new Product(); // Product type

Le compilateur de vérifier le type de la valeur que vous avez définie et fixée sur l'objet.

27
répondu Felipe Oriani 2017-12-11 00:21:46

Objet: Chaque objet en C# est dérivé du type d'objet, directement ou indirectement. Il est variable de temps de compilation et nécessite la boxe et la décompression pour la conversion et il le rend lent. Vous pouvez changer le type de valeur en type de référence et vice versa.

    public void CheckObject()
    {
        object test = 10;
        test = test + 10;    // Compile time error
        test = "hello";      // No error, Boxing happens here
    }

Var: Il est variable de temps de compilation et ne nécessite pas de boxe ni de décompression. Comme Var est une fonctionnalité de compilation, la vérification de tous les types n'est effectuée qu'au moment de la compilation. Une fois que Var a été initialisé, vous ne pouvez pas changer le type y sont stockées.

    public void CheckVar()
    {
        var test = 10;         // after this line test has become of integer type
        test = test + 10;    // No error
        test = "hello";        // Compile time error as test is an integer type
    }

Dynamique: Il est variable de temps d'exécution et ne nécessite pas de boxe et unboxing. Vous pouvez assigner et valeur à dynamic et aussi changer le type de valeur stocké dans same. Toutes les erreurs sur la dynamique peut être découvert au moment de l'exécution. Nous disons aussi que la dynamique est un objet run time qui peut contenir n'importe quel type de données.

    public void CheckDynamic()
    {
        dynamic test = 10;
        test = test + 10;    // No error
        test = "hello";       // No error, neither compile time nor run time
    }
34
répondu Love Gupta 2014-06-25 05:27:10

1)var est utilisé pour la définition de type implicite. Par exemple, si vous définissez une variable comme ceci:

var number = 123;

compilateur infère le type basé sur la Valeur assignée et votre variable initialisée comme entier dans 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 utiliser var comme ceci:

var number;
number = 123;

parce que vous devez assigner quelque chose à votre variable si vous utilisez var mot-clé pour que le type puisse être déterminé.

2)Object est une classe de base pour toutes les classes. C# toutes les classes héritent de la classe objet, vous pouvez donc tout assigner à un objet.Par exemple:

object str = "bla bla bla..."; 
str = 234;
str = DateTime.Now;

cela fonctionne parce que quand vous faites cela boxing / unboxing effectuer automatiquement pour vous. Et contrairement à var mot-clé, vous pouvez utiliser object comme ceci:

object myVariable;
myVariable = "bla bla bla..";

3) dynamic est une fonctionnalité intéressante qui est venu avec C# 4.0, vous pouvez utiliser dynamic si vous ne connaissez pas le type de retour de votre fonction dans le temps de compilation.Votre type sera déterminé run-time.Par conséquent, vous ne pouvez pas utiliser intellisense avec des variables dynamiques.

Vous pouvez utiliser dynamiques comme ceci:

dynamic myObj = SomeMethod();
myObj.DoSomething();
myObj.Method1();

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 dernière chose que je veux mentionner, dynamic et object peut être un type de paramètre, mais var vous ne pouvez pas. Par exemple, vous pouvez faire ceci:

public void SomeMethod(dynamic arg1)

Mais vous ne pouvez pas faire ceci:

public void SomeMethod(var arg1)

Parce que var n'est pas un type mais plutôt un sucre syntaxique pour laisser le compilateur inférer le type pour vous.

8
répondu Selman Genç 2017-07-05 11:23:23

Object est la classe racine dont tous les objets .net dérivent.

var est utilisé comme un raccourci, si vous ne voulez pas écrire dire string x = "a", mais à la place écrivez var x = "a". Cela ne fonctionne que si le compilateur peut comprendre ce que vous voulez dire.

dynamic implique que ce que vous faites avec l'objet n'est evaulé qu'à l'exécution (x.StrangeMethod() ne causera pas d'erreur de compilation, même si la méthode n'existe pas), utile lors de l'interaction avec les langages de script.

6
répondu Dani J 2014-01-12 21:17:03

C'est assez simple...

Objet est un type de base .NET. Tous les autres types en héritent. Ainsi la variable du type d'objet peut contenir tout. Mais cela ne devrait être fait qu'il n'y a pas d'autres options, pour les raisons suivantes:

  1. avant de lire / écrire à cette variable, nous devons faire des opérations de déboxage/boxe, qui sont coûteuses.

  2. le compilateur ne peut pas faire de vérification de type au moment de la compilation qui peut entraîner des bogues et des exceptions à l'exécution. Par exemple, ce code sera compilé avec succès mais lancera une exception au moment de l'exécution:

    object o = "2"; 
    int i = 1 + (int)o;
    

Var n'est pas un type, mais l'instruction pour le compilateur de conclure un type de variable à partir du contexte du programme. Il est nécessaire pour les méthodes anonymes, mais peut également être utilisé partout où vous le souhaitez. Attention seulement votre programme n'est pas devenu difficile à lire. Le compilateur prend sa décision au moment de la compilation influence sur l'efficacité du programme.

Dynamique - est un type spécial pour lequel le compilateur ne vérifie pas le type au moment de la compilation. Le type est spécifié au moment de l'exécution par CLR. C'est statique (!) type et après que le type variable est spécifié, il ne peut pas être modifié plus tard. Nous ne devrions utiliser ce type qu'il n'y a pas d'autres options pour des raisons similaires avec le type d'objet:

  1. Il y a une opération d'addition pour spécifier le type au temps d'exécution-qui réduit l'efficacité du programme.

  2. le compilateur n'effectue pas de vérification de type qui peut entraîner des bogues et des exceptions au moment de l'exécution.

4
répondu Lebedev Alexei 2014-01-13 15:04:08

Voici la différence entre les systèmes.L'objet , de la dynamique et du var.

tout dans .net est dérivé du système.Type d'objet. Mais si vous cherchez une différence spécifique, les voici.

Différence entre l'Objet et dynamique.

1.Vous ne pouvez pas implicitement lancer une variable D'objet type dans un autre type. Compilateur ne vous laissera pas faire cela. D'autre part, vous peut implicitement lancer n'importe quel type à dynamic. Le compilateur ne se plaindra pas parce que le moulage sera effectué pendant le temps d'exécution et l'exception, si nécessaire sera soulevé pendant le temps d'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 la dynamique dans les arguments.

différence entre dynamique et var.

1.Déclarer une variable locale comme dynamique ou var n'a qu'une différence syntaxique. 2. Vous ne pouvez pas déclarer une variable de type var sans l'initialiser, Mais vous pouvez le faire pour une dynamique variable 3. Vous ne pouvez pas utiliser une variable var pour passer comme argument de méthode ou retourner d'une méthode. 4. Vous ne pouvez attribuer une expression de var, mais vous pouvez le faire pour une variable dynamique.

3
répondu jewel jose 2015-12-27 23:14:52

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é en temps de compilation en fonction de la valeur qui lui est attribuée.

Dynamique

provient de la partie DLR de .net, vous n'en aurez besoin que lorsque vous voulez utiliser un type de frappe non fort.

2
répondu Clueless 2014-03-20 09:00:50

le compilateur dit que var est un mot-clé contextuel utilisé pour la déclaration des variables. 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, compilateur sait tout sur cette variable et implique la sécurité de type sur elle.

0
répondu Vikas Thombre 2018-06-20 11:15:57