metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2010-07-13 11:48 am

Плющ, конструкторы и фабрики

Обдумываю одну рабочую шизу и есть там один момент - нужно создавать объекты, реализующие один и тот же интерфейс, но немного отличающиеся. Самое простое решение - это передать функцию, которая из параметров создаст нужный объект и вернет его. То бишь фабрику. В связи с этим меня начало плющить: а зачем в дополнение к конструктору объекта еще создавать и статический метод-фабрику, если они делают одно и то же? Но при этом метод можно передать в виде функции, а конструктор нельзя.

[identity profile] w00dy.livejournal.com 2010-07-13 03:19 pm (UTC)(link)
в IL создание объекта и вызов конструктора - две разные сущности, и конструктор, по сути, это обычный метод. Но чтобы дёрнуть newobj нужно знать тип объекта. Плюс не забывай что фабрика срабатывает до создания объекта (специфицирует тип объекта), а конструктор уже после.

[identity profile] w00dy.livejournal.com 2010-07-13 03:26 pm (UTC)(link)
только не "в IL", а "для .net Execution Engine". Тут (http://www.rsdn.ru/article/dotnet/GC.xml#EVFAC) можно почитать о том как EE создаёт объекты.