Wie merkt sich ein Objekt, wenn es in eine Basisklasse umgewandelt wird, was es wirklich ist?

Dies ist eine Anfängerfrage, aber ich bin daran interessiert zu erfahren, was hier los ist. Meine Frage ist, was passiert hinter den Kulissen, wenn Sie ein Objekt herunterwerfen? Behält es eine Art Metadaten darüber bei, was es ursprünglich war? Hier ist was ich meine:

Angenommen, ich habe eine Methode namens "ClockIn", die einen Parameter vom Typ "Employee" akzeptiert:

public static void ClockIn(Employee employee)
{
   var manager = employee as Manager;
   if (manager != null)
   {
      manager.OpenSafe();
   }
}

Angenommen, Manager ist eine Unterklasse vom Typ Employee und verfügt über die Methode "OpenSafe":

public class Manager : Employee 
{
   public void OpenSafe()
   { 
      ... 
   }
}

Die "ClockIn" -Methode ruft die OpenSafe-Methode auf, wenn sie feststellt, dass ein Manager übergeben wurde. Sowie

var bob = new Manager();
ClockIn(bob);

Hier habe ich eine Instanz des Typs Manager an eine Methode übergeben, die die Basisklasse Employee akzeptiert. Ich muss die Instanz innerhalb der ClockIn-Methode in Manager umwandeln, bevor ich OpenSafe aufrufen kann.

Die Frage ist, gibt es einige Metadaten, die sich daran erinnern, dass "bob" ein Manager ist, obwohl ich ihn als Mitarbeiter übergeben habe? Woher weiß der Code, dass er tatsächlich in einen Manager umgewandelt werden kann? Ist auf dem Haufen etwas los?

Antworten auf die Frage(10)

Ihre Antwort auf die Frage