Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
After reading the excellent Cast Notation and Introduction of safe_cast<>, I thought I would try the following:
int main()
{
String ^ s = "string/chaîne/cadena" ;
Object ^ o = s ;
String ^ s1 = safe_cast<String ^>(o) ; // string s1 = (string) o;
// ldloc.0 / castclass string / stloc.3
Console::WriteLine( "{0} ({1})", s1, s1->GetType() ) ;
String ^ s2 = dynamic_cast<String ^>(o) ; // string s2 = o as string;
// ldloc.0 / isinst string / stloc.2
Console::WriteLine( "{0} ({1})", s2, s2->GetType() ) ; // ldloc.0 / stloc.1
o = 3 ; // boxing
String ^ s3 = static_cast<String ^>(o) ; // ldloc.0 / stloc.3
Console::WriteLine( "{0} ({1})", s3, s3->GetType() ) ;
return 0;
}
I had to compile with /clr:pure. What do you think the output is?
string/chaîne/cadena (System.String)
string/chaîne/cadena (System.String)
3 (System.Int32)
Hmmm…
For even more fun, look at the s3 value in the local or watch window!