Der typeof-Ausdruck in C♯
Syntax
Ein typeof-Ausdruck besteht aus dem Schlüsselwort¹ »typeof«, gefolgt von der lexikalischen Einheit runde Klammer auf »(«, einer Typangabe und der lexikalischen Einheit runde Klammer zu »)« (¹ C♯ 6.0, 2.4.3).
- Der typeof-Ausdruck
Ausdruck
.------. .-. .-----------. .-.
--->( typeof )--->( ( )--->| Typangabe |--->( ) )--->
'------' '-' '-----------' '-'
Als Typangabe ist jeder der bisher im Kurs vorgestellten Typangaben »int«, »double«, »decimal«, »string«, »global::System.Math« und »global::Microsoft.JScript.MathObject« erlaubt.
Obwohl ein typeof-Ausdruck eine gewisse Ähnlichkeit mit einem Aufruf hat, handelt es sich bei ihm nicht um einen Aufruf. Dennoch wird er wegen dieser Ähnlichkeit zu einem Aufruf auch in diesem Kapitel über Aufrufe behandelt.
Eine Typangabe gilt in C♯ als auch Ausdruck¹, obwohl wir sie in diesem Kurs oft als eine bloße „Angabe“ ansehen (¹ “expression ” laut C♯ 6.0, 7.1).
Semantik
Der Wert eines Ausdrucks dieses Typs ist der Systemtyp des angegeben Typs. Wir können diesen dann mit »WriteLine« ausgeben und sehen eine vollständig qualifiziert Schreibweise für den angegebenen Typ.
In C♯ kann ein und derselbe Typ verschiedene Angabeformen haben. Beispielsweise geben »int« und »global::System.Int32« den gleichen Typ an. Es gibt jedoch für jeden Typ genau eine eindeutige Systemtypschreibweise. Daher könnte die Ausgabe des Systemtyps dazu dienen, zu erkennen, ob zwei unterschiedliche Typangaben für denselben Typ stehen.
Beispiele
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( int )); }}Protokoll
System.Int32
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( global::System.Int32 )); }}- Protokoll
System.Int32
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( double )); }}Protokoll
System.Double
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( decimal )); }}Protokoll
System.Decimal
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( string )); }}Protokoll
System.String
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( global::System.Math )); }}Protokoll
System.Math
Program.cs
public static class Program
{ public static void Main()
{ global::System.Console.WriteLine
( typeof( global::Microsoft.JScript.MathObject )); }}Protokoll
Microsoft.JScript.MathObject