Как отражение c# является временем выполнения? - PullRequest
0 голосов
/ 20 февраля 2020

Каждое определение говорит, что C# отражений используется для определения типа объекта во время выполнения. Может ли тип объекта меняться во время выполнения? Кто-нибудь, пожалуйста, приведите мне пример.

1 Ответ

1 голос
/ 20 февраля 2020

Конечно, сущность может изменить свой тип runtime во время выполнения. Он просто не может изменить тип compile . Это связано с тем, что c# является безопасным типом языка (один раз для данного типа, всегда для данного типа).

Предположим, у вас есть 3 класса - один абстрактный класс, скажем, Animal и два класса, производных от него, скажем, Cat и Dog. Тогда

Animal animal = new Dog(); //compile time type is Animal runtime type is Dog
Console.WriteLine(animal.GetType().Name); // Dog
...
animal = new Cat(); // compile time type is still Animal (c# is Type safe)
// but runtime type just changed to Cat;
Console.WriteLine(animal.GetType().Name); // Cat

Обратите внимание, что все время, пока вы программируете животное, не будет «просто объектом». Существо (компиляции) типа Animal имеет большой прилив - свойство bool IsAlive, метод Breath() и многое другое. Но когда вы пишете свой код (то есть время компиляции), у вашего экземпляра "animal" не будет Tail (потому что не у каждого животного есть хвост). Вы можете получить доступ (например, к intellisense) только к тем вещам, которые, как вы уверены, есть (только к животным). Это все еще говорит о многом, но не так много, как конкретные подклассы. Это очень общая вещь, и это хорошая вещь.

...