2009-08-27 19 views
11

Was ist Typ Casting, was nutzt das? Wie funktioniert es?Typecasting in C#

Bitte stellen Sie ein Beispiel-Tutorial zur Verfügung, ich konnte keine guten suchen Google finden.

+2

ha ha ha .. was für ein Witz !!! – MAC

+0

Ich kann Ihnen sagen, wie Sie Ihre Fragen richtig formulieren, Homie! –

+0

[http://en.wikipedia.org/wiki/Type_conversion](http://en.wikipedia.org/wiki/Type_conversion) – Raghav

Antwort

50

Casting ist in der Regel darum, den Compiler zu sagen, dass, obwohl es weiß nur, dass ein Wert von einigen allgemeinen Typ ist, wissen Sie, es ist tatsächlich einer spezifischeren Typ. Zum Beispiel:

Es gibt verschiedene Konvertierungsoperatoren. Die (typename) expression Form können drei verschiedene Dinge tun:

  • Eine unboxing Umwandlung (zB von einer geschachtelten ganze Zahl int)
  • Eine benutzerdefinierte Umwandlung (zB XAttribute zu string Guss)
  • Ein Verweis Umwandlung innerhalb einer Typenhierarchie (zB Gießen object zu string)

Alle diese zum Zeitpunkt der Ausführung versagen kann, wobei in diesem Fall eine Ausnahme ausgelöst wird .

Der as Operator, auf der anderen Seite, nie eine Ausnahme auslöst - stattdessen das Ergebnis der Umwandlung null ist, wenn es fehlschlägt:

object x = new object(); 
string y = x as string; // Now y is null because x isn't a string 

Es ist für Unboxing zu einem Nullable-Wertetyp verwendet werden kann:

object x = 10; // Boxed int 
float? y = x as float?; // Now y has a null value because x isn't a boxed float 

Es gibt auch implizite Konvertierungen, z von int zu long:

int x = 10; 
long y = x; // Implicit conversion 

Does, die alles abdecken waren Sie interessiert?

+1

Schöne Antwort Jon! – UnkwnTech

+2

@jon Skeet gibt Antwort und es deckt nicht alles ab, was es jemals geschehen ist? – Shrivallabh

+0

Lesen Sie [this] (http://stackoverflow.com/questions/2690866/what-is-the-purpose-of-a-question-after-a-type-for-example-int-myvariabl) zu sehen was das Fragezeichen nach dem 'float' Typ macht. – martijnn2008

2

Siehe this oder this:

Da C# statisch typisierte-wird bei der Kompilierung, nachdem eine Variable deklariert ist, kann es nicht wieder oder zum Speichern von Werten eines anderen Typs verwendet deklariert werden, es sei denn, dass Typ umwandelbar ist den Typ der Variable

...

Allerdings könnten Sie manchmal brauchen einen Wert in einer variablen oder Methodenparameter eines anderen Typs zu kopieren. Beispielsweise könnten Sie eine Ganzzahlvariable haben, die Sie an eine Methode übergeben müssen, deren Parameter als doppelt eingegeben wird. Oder Sie müssen einer Variablen eines Schnittstellentyps möglicherweise eine Klassenvariable zuweisen. Diese Arten von Operationen werden als Typumwandlungen bezeichnet. In C# können Sie die folgenden Konvertierungsarten ausführen:

+0

Von der Verbindung: "Jedoch, wenn eine Umwandlung nicht ohne ein Risiko des Verlierens gemacht werden kann Informationen, der Compiler erfordert, dass Sie eine explizite Konvertierung durchführen, die eine Besetzung aufgerufen wird. " Sagt es Casting ist das gleiche wie explizite Konvertierung? –

0

Umwandlung von einem Datentyp in einen anderen.

Für eine allgemeine Lesung siehe this. auch

Siehe msdn

3

Casting bedeutet, dass ein Verweis auf ein Objekt erstellt wird, das einen anderen Typ als die Referenz hat, die Sie gerade halten. Sie können Upcasting oder Downcasting durchführen und haben jeweils unterschiedliche Vorteile.

Upcasting:

string greeting = "Hi Bob"; 
object o = greeting; 

Dies erzeugt eine allgemeine Referenz (Objekt) aus dem genaueren Hinweis (string). Vielleicht haben Sie Code geschrieben, dass jedes Objekt behandeln kann, wie folgt aus:

Console.WriteLine("Type of o is " + o.GetType()); 

Dieser Code muss nicht egal geändert werden, was Sie zum Einstellen o Objekte.

einziehe:

object o = "Hi Bob"; 
string greeting = (string)o; 

Hier wollen Sie präziser Referenz. Sie wissen vielleicht, dass das Objekt ein String (Sie diese zB testen.

if (o is string) 
{ do something } 

nun die Referenz als String anstelle eines Objekts behandeln kann zB hat ein String eine Länge (sondern ein Objekt nicht), so kann man sagen:.

Console.WriteLine("Length of string is " + greeting.length); 

, die Sie mit einem Objekt nicht tun können

0

auch, wenn Sie ausdrücklich sind Gießen, können Sie die Vorteile von Musteranpassung nehmen wenn Sie ein Objekt haben. :

object aObject = "My string value"; 

Sie können werfen sicher das Objekt als String in einer einzigen Zeile:

if (aObject is string aString) 
{ 
    Console.WriteLine("aString = " + aString) 
    // Output: "aString = My string value" 
} 

diese Verwendung, zusammen mit einem invertierten if-Anweisung, können Sie sicher Typen gegossen und scheitern früh, wenn es sein muss:

Verwandte Themen