В чем разница между типом времени выполнения и типом времени компиляции на C# и тем, какие последствия существуют в отношении вызова виртуального метода?Тип времени выполнения vs тип времени компиляции в C#
ответ
Допустим, у нас есть два класса, объявленные A
и B
следующим образом:
internal class A
{
internal virtual void Test() => Console.WriteLine("A.Test()");
}
internal class B : A
{
internal override void Test() => Console.WriteLine("B.Test()");
}
B
наследует от A
и переопределяет метод Test
который выводит сообщение на консоль.
В чем разница между типом времени выполнения и времени компиляции типа в C#
Теперь давайте рассмотрим следующее заявление:
A test = new B();
во время компиляции: компилятор знает только, что переменная
test
имеет типA
. Он не знает, что мы на самом деле даем ему примерB
. Поэтому компиляционный типtest
равенA
.во время выполнения: тип
test
, как известно,B
и, следовательно, имеет тип времени выполненияB
и какие последствия существуют в отношении виртуального вызова метода
Рассмотрите следующий код st atement:
((A)new B()).Test();
Мы создаем экземпляр B
приведения его в тип A
и вызова метода Test()
на этом объекте. Тип компилятора - A
, а тип выполнения - B
.
Когда компилятор хочет разрешить вызов .Test()
, у него есть проблема. Поскольку A.Test()
- virtual
, компилятор не может просто вызвать A.Test
, потому что хранимый экземпляр мог бы переопределить метод.
Сам компилятор не может определить, какой из методов следует назвать A.Test()
или B.Test()
. Метод, который вызывается, определяется временем выполнения, а не «жестко запрограммированным» компилятором.
- 1. тип времени компиляции во время выполнения
- 2. Время выполнения VS-времени компиляции
- 3. C# .NET тип объекта времени выполнения
- 4. Каков тип времени компиляции? (в Java)
- 5. Оценка функции времени компиляции, неполный тип
- 6. Стоимость времени выполнения компиляции
- 7. Возвращаемый тип, основанный на переменных времени компиляции
- 8. Базовый класс или производный класс - это тип времени выполнения?
- 9. Проверка времени выполнения C
- 10. полиморфизм времени выполнения/компиляции
- 11. Другая ошибка времени выполнения '13': Тип Несоответствие
- 12. Обобщение оценки времени компиляции и времени выполнения
- 13. Ошибка времени компиляции или времени выполнения
- 14. полиморфизм времени компиляции и полиморфизм времени выполнения
- 15. утверждение времени компиляции в C++
- 16. C++ времени компиляции полиморфизм
- 17. как вернуть тип указателя в компонент времени выполнения?
- 18. Операторы времени выполнения в C
- 19. Определение времени выполнения параметров компиляции
- 20. Маркерные интерфейсы: Runtime vs ошибки времени компиляции
- 21. Константы времени компиляции в C++
- 22. Тип данных времени в Rails
- 23. Ошибка времени выполнения и времени компиляции в Perl
- 24. Проверка времени отклика времени компиляции
- 25. Отражение времени компиляции в C#
- 26. C++ ошибка времени компиляции
- 27. Каков тип времени субтитров (.srt)?
- 28. Бесконечность времени компиляции C++
- 29. Как разрешить правильный тип из контейнера (статический тип и тип времени выполнения)?
- 30. Полиморфизм шаблона времени компиляции C++
Отличный ответ очень легко понять. Спасибо! – jpchauny
Спасибо. Спасибо, что нашли время, чтобы набрать наш очень четкий ответ. Очень признателен. –