Это новичок, но мне интересно узнать, что происходит здесь. Мой вопрос: что происходит за кулисами, когда вы бросаете объект? Поддерживает ли он какие-то метаданные о том, что изначально было? Вот что я имею в виду:
Предположим, что у меня есть метод под названием "ClockIn", который принимает параметр типа "Сотрудник":
public static void ClockIn(Employee employee)
{
var manager = employee as Manager;
if (manager != null)
{
manager.OpenSafe();
}
}
Итак, предположим, что Manager является подклассом типа Employee и что он имеет метод OpenSafe:
public class Manager : Employee
{
public void OpenSafe()
{
...
}
}
Метод "ClockIn", если он обнаруживает, что диспетчер был передан, вызывает метод OpenSafe. Например:
var bob = new Manager();
ClockIn(bob);
Здесь я передал экземпляр типа Manager в метод, который принимает базовый класс Employee. Мне нужно передать экземпляр внутри метода ClockIn в диспетчер, прежде чем я могу позвонить OpenSafe.
Вопрос в том, есть ли какие-то метаданные, которые помнят, что "bob" - это Менеджер, хотя я передал его как Employee? Как код знает, что он действительно может быть передан менеджеру? Что-то происходит в куче?