Question

J'ai récemment commencé à travailler avec JSON et le framework ExtJs et j'ai rencontré le code suivant dans un exemple.

nous récupérons les informations de l'interface en utilisant ceci:

object updatedConfig = JavaScriptConvert.DeserializeObject(Request["dataForm"]);

Ensuite, dans l'exemple, ils procèdent comme suit:

JavaScriptObject jsObj = updatedConfig as JavaScriptObject;

Je n'ai jamais vu le "comme". mot-clé utilisé comme ça avant. Est-ce juste une autre forme de boxer explicitement la variable updatedConfig en tant que JavaScriptObject ou y a-t-il quelque chose que je ne comprends pas à ce sujet?

Merci

Était-ce utile?

La solution

Ceci est connu comme un casting sécurisé. En réalité, il tente de transtyper d'un type à un autre et si la conversion échoue, il renvoie null au lieu de lancer une InvalidCastException .

Il existe en fait deux instructions IL distinctes pour gérer la différence entre " en tant que " coulée et coulée statique normale. Le code C # suivant contient les deux types de diffusion:

using System;

class Program
{
    static void Main()
    {
        Object o = null;

        String s0 = (String)o;
        String s1 = o as String;
    }
}

La première conversion utilise l'instruction IL castclass et la deuxième conversion utilise l'instruction isinst .

Veuillez consulter Lancer ou utiliser le mot clé "en tant que" dans CLR pour une explication plus détaillée.

Autres conseils

Le en tant que mot clé est un moyen sûr moyen de lancer des objets en C #.

SomeType a = obj as SomeType;

Cela signifie que si obj est de type SomeType , obj sera converti dans ce type. Si obj est nul ou n'est pas de type SomeType , a sera nul.

Un autre avantage du mot-clé as est qu'il lève une exception lors de la compilation si le type ne peut pas être converti là où as (cast) ne rompt pas avant l'exécution.

Par ailleurs, il est important de vous rappeler que " as " fonctionne dans la référence pas dans l'objet lui-même. C'est pourquoi il peut renvoyer null au lieu de déclencher une exception, car l'objet restera intact. Et c’est pourquoi vous ne pouvez le faire que sur des types de référence.

Normalement, cela n'a pas beaucoup d'importance, mais si vous implémentez une fonction de transtypage (comme ici, dans MSDN ) il ne sera pas invoqué à l'aide de l'opérateur as.

Ainsi, l'opérateur as est utile pour "naviguer dans la hiérarchie de l'héritage": si vous avez une classe Person, vous pouvez effectuer les opérations suivantes: Personne p = nouvelle personne (); ojbect o = p en tant qu'objet; p = o en tant que personne; Mais dans tous les cas, l’objet en mémoire ne sera modifié en aucune façon, mais uniquement en référence.

L’espoir que cela aide

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top