Ich habe beide in einem Code gesehen, den ich pflege, aber ich kenne den Unterschied nicht. Ist dort eines?
Lassen Sie mich hinzufügen, dass myCustomer eine Instanz von Customer ist
Das Ergebnis von beiden ist in Ihrem Fall genau das gleiche. Es wird Ihr benutzerdefinierter Typ sein, von dem abgeleitet wird System.Type
. Der einzige wirkliche Unterschied besteht darin, dass Sie verwenden, wenn Sie den Typ von einer Instanz Ihrer Klasse erhalten möchten GetType
. Wenn Sie keine Instanz haben, aber den Typnamen kennen (und nur den tatsächlichen Namen System.Type
zum Überprüfen oder Vergleichen benötigen ), würden Sie verwenden typeof
.
BEARBEITEN: Lassen Sie mich hinzufügen, dass der Aufruf von zur GetType
Laufzeit aufgelöst wird, während er typeof
zur Kompilierungszeit aufgelöst wird.
GetType () wird verwendet, um den tatsächlichen Typ einer Objektreferenz zur Laufzeit zu ermitteln. Dies kann sich aufgrund der Vererbung vom Typ der Variablen unterscheiden, die auf das Objekt verweist. typeof () erstellt ein Type-Literal, das genau dem angegebenen Typ entspricht und zur Kompilierungszeit festgelegt wird.
quelle
Ja, es gibt einen Unterschied, wenn Sie einen vom Kunden geerbten Typ haben.
class VipCustomer : Customer { ..... } static void Main() { Customer c = new VipCustomer(); c.GetType(); // returns typeof(VipCustomer) }
quelle
Zum einen benötigen Sie eine tatsächliche Instanz (dh myCustomer), zum anderen nicht
quelle
typeof (foo) wird während der Kompilierungszeit in eine Konstante konvertiert. foo.GetType () geschieht zur Laufzeit.
typeof (foo) konvertiert auch direkt in eine Konstante seines Typs (dh foo), sodass dies fehlschlagen würde:
public class foo { } public class bar : foo { } bar myBar = new bar(); // Would fail, even though bar is a child of foo. if (myBar.getType == typeof(foo)) // However this Would work if (myBar is foo)
quelle
typeof wird zur Kompilierungszeit ausgeführt, während GetType zur Laufzeit ausgeführt wird. Das ist das Besondere an diesen beiden Methoden. Wenn Sie sich mit der Typhierarchie befassen, können Sie den genauen Typnamen eines Typs einfach durch Ausführen von GetType ermitteln.
public Type WhoAreYou(Base base) { base.GetType(); }
quelle
Der Operator typeof verwendet einen Typ als Parameter. Es wird zur Kompilierungszeit behoben. Die GetType-Methode wird für ein Objekt aufgerufen und zur Laufzeit aufgelöst. Der erste wird verwendet, wenn Sie einen bekannten Typ verwenden müssen, der zweite dient zum Abrufen des Typs eines Objekts, wenn Sie nicht wissen, was es ist.
class BaseClass { } class DerivedClass : BaseClass { } class FinalClass { static void RevealType(BaseClass baseCla) { Console.WriteLine(typeof(BaseClass)); // compile time Console.WriteLine(baseCla.GetType()); // run time } static void Main(string[] str) { RevealType(new BaseClass()); Console.ReadLine(); } } // ********* By Praveen Kumar Srivastava
quelle