Frage

Ich habe vor kurzem angefangen habe die Arbeit mit JSON und dem ExtJs Rahmen und ich habe über den folgenden Code in einem Beispiel kommen.

Wir rufen Sie die Informationen aus dem Frontend mit diesem:

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

Dann in dem Beispiel, das sie wie folgt vor:

JavaScriptObject jsObj = updatedConfig as JavaScriptObject;

Ich habe noch nie das „als“ Schlüsselwort wie die zuvor verwendet gesehen. Ist das nur eine andere Form der explizit die updatedConfig Variable als JavaScriptObject Boxen oder ist es etwas, was ich nicht über dieses Verständnis?

Danke

War es hilfreich?

Lösung

Dies wird als sichere Besetzung bekannt. Was ist tut, ist es versucht, von einem Typ zum anderen zu werfen und wenn die Besetzung null es gibt nicht stattdessen eine InvalidCastException werfen.

Es gibt tatsächlich zwei getrennte IL Anweisungen, um den Unterschied zwischen „as“ Gießen und normalen statischem Gießen zu behandeln. Der folgende C # -Code enthält beide Arten von Casting:

using System;

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

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

Der erste Guss verwendet die castclass IL Anweisung und die zweite gegossene verwendet die isinst Anweisung.

Bitte finden Sie unter Casting vs mit dem 'wie' Schlüsselwort in die CLR für eine ausführlichere Erklärung.

Andere Tipps

Die als Schlüsselwort ist ein sicherer Art und Weise Objekte in C # zu werfen.

SomeType a = obj as SomeType;

bedeutet, dass wenn obj vom Typ SomeType ist, wird obj in dieser Art gegossen werden. Wenn obj null ist oder nicht vom Typ SomeType, wird eine Null sein.

Ein weiterer Vorteil der als Schlüsselwort ist, dass es eine Kompilierung Ausnahme ausgelöst wird, wenn der Typ nicht gegossen werden kann, wo, wie (cast) bricht nicht erst zur Laufzeit.

Außerdem ist es wichtig, sich daran zu erinnern, dass „als“ in der Referenz arbeitet nicht im Objekt selbst. Deshalb ist es null statt wirft eine Ausnahme zurückkehren kann, weil das Objekt intakt bleiben. Und das ist, warum Sie es nur Typen auf Referenz tun können.

Normalerweise spielt es keine Rolle, dass viel, aber wenn Sie eine Umsetzungsfunktion implementieren (wie hier in MSDN ) wird es nicht , indem man als Operator aufgerufen werden.

So ist der als Bediener nützlich, um „nach oben und unten das Erbe hiearchy“: Wenn Sie eine Klasse Person haben, können Sie tun: Person p = new Person (); ojbect o = p als Objekt; p = o als Person; Aber in allen Fällen das Objekt im Speicher wird nicht in irgendeiner Weise verändert wird, nur den Verweis auf mich.

Ich hoffe, das hilft

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top