2021-11-18 17:23:12
Конспект по теме "dynamic, object, var" из темы "C#"
В языках со статической типизацией выявление всех типов и их членов (свойств, методов) происходит на этапе компиляции. Т.е. если у объекта нет указанного метода, то программа не скомпилируется. В языках с динамической типизацией проверка происходит в процессе выполнения. dynamic это фича из языков с динамической типизацией.
object:
⦁ у компилятора мало информации об объекте, т.к. он хранится там в обобщённом виде;
⦁ может передаваться как параметр и быть возвращаемым значением метода;
⦁ позволяет запаковать любой объект в эту переменную. Но нельзя вызвать методы этих объектов. Доступны будут только методы класса object;
⦁ чтобы положить в object переменную любого типа - нужно произвести преобразование к object. Чтобы достать из object переменную определённого типа, нужно произвести преобразование к этому типу (распаковка);
dynamic:
⦁ позволяет не производить проверку наличия свойств, методов на этапе компиляции. И производить её на этапе выполнения;
⦁ переменные этого типа могут менять тип во время работы программы;
⦁ позволяет вызывать любые методы с любым количество параметров. Однако, если при выполнении будет подставлен тип, у которого нет данного метода - выпадет исключение RuntimeBinderException;
⦁ у компилятора нет никакой информации об объекте;
⦁ может передаваться как параметр и быть возвращаемым значением метода;
⦁ преобразование к типу не требуется, но нужно точно знать, что этот тип содержит нужный метод;
⦁ желательно избегать использования, т.к. затруднена отладка, высока вероятность ошибки;
var:
⦁ у компилятора есть вся информация об объекте, т.к. он хранится в нужном типе;
⦁ это просто синтаксический сахар, чтобы не объявлять тип переменной. По сути, это просто сокращение записи;
⦁ не может передаваться как параметр и быть возвращаемым значением метода;
⦁ не нужно осуществлять никаких преобразований, т.к. у компилятора есть вся необходимая информация об объекте;
Вернуться в бэклог категории C#
441 viewsedited 14:23