warum-Objekt.GetType() ist nicht virtuell?
code sample von MSDN
public class Test {
public static void Main() {
MyBaseClass myBase = new MyBaseClass();
MyDerivedClass myDerived = new MyDerivedClass();
object o = myDerived;
MyBaseClass b = myDerived;
Console.WriteLine("mybase: Type is {0}", myBase.GetType());
Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType()); }}
/*
This code produces the following output.
mybase: Type is MyBaseClass
myDerived: Type is MyDerivedClass
object o = myDerived: Type is MyDerivedClass
MyBaseClass b = myDerived: Type is MyDerivedClass
*/
So wäre es logisch zu machen GetType() virtual zumindest funktioniert als virtuelle? Kann jemand explaine das?
Und die andere Frage Ist jede andere Methode in der NET-framework, die Verhalten gleichermaßen GetType?
Du musst angemeldet sein, um einen Kommentar abzugeben.
da .Net framework nicht möchten, dass Sie das überschreiben der GetType () - Methode und
spoof
über den Typ.nehme an, Sie können diese Methode überschreiben, was würden Sie sonst noch wollen, dass es nicht andere als die Rückkehr der Typ der Instanz. und wenn Sie überschreiben die Methode, für jede Ihrer Klassen die Rückkehr der Typ der Instanz, Sie nicht verletzen, dann TROCKNEN.
GetType liefert den aktuellen Typ des Objekts. Dies ermöglicht es uns, zu wissen, was für ein Objekt wir wirklich übergeben zu 'unserem' - Funktion. Viele Methoden des Frameworks benötigen diese, um zu bestimmen, Ihre eigene Funktionalität - in den meisten Fällen um die Attribute dieser Klasse.
Wenn der Rahmen würde sich Locker die Möglichkeit zu bestimmen, den tatsächlichen Typ eines Objekts, das Objekt zu verlieren, diese Art als gut.
Wenn Sie möchten, um zu wissen, die Art in Ihrem Gültigkeitsbereich der Methode - die Art, die Sie deklariert oder wurde abgeholt von der compiler - Sie können eine ziemlich einfache Methode:
Wenn
GetType()
war virtuelle, eine Klasse mit dem NamenHumanBeing
außer Kraft setzen kann und die Rückkehr eine Art Objekt fürRobot
ist als spoofing bezeichnet wird und dies zu verhindern ist eine der wichtigsten Funktionen der CLR aufgerufen, Geben Sicherheit.Während seiner wahren, dass Sie nicht überschreiben das Objekt.GetType () - Methode, die Sie verwenden können, "neu", um eine überlastung es vollständig, wodurch spoofing anderen bekannt geben. Das ist interessant, ich habe jedoch nicht herausgefunden, wie man erstellen Sie eine Instanz der "Typ" Objekt von Grund auf, sodass im folgenden Beispiel vorgibt, ein anderer Typ.
Nach dem erstellen einer Instanz von dieser (neuen NotAString()).GetType(), wird in der Tat die Rückkehr der Typ für eine Zeichenfolge.
GetType
hat eine Instanz vonobject
oder zumindest einige Basis-Typ, die Sie Steuern, oder kann die Vernunft über. Wenn Sie bereits eine Instanz der meisten abgeleiteten Typ, dann gibt es keine Notwendigkeit zu nennenGetType
auf Sie. Der Punkt ist, solange jemand nutztGetType
auf eineobject
Sie können sicher sein, es ist das system der Umsetzung, nicht eine beliebige andere benutzerdefinierte definition.Ändern Dr. Schlummer ist Antwort, um "erstellen Sie eine Instanz der "Typ" object from scratch":