ger_kar писал(а):Кучей людей применительно ко всему многообразию средств и языков программирования или кучей людей применительно к VB6? Сколько кода разного видел на VB6, то такую семантику вызова нигде не встречал.
И конечно же распространяешь частный случай (свой собственный опыт) на всех остальных?
ger_kar писал(а):В VB6 такое точно не прокатит, ибо вызов конструктора с параметрами там не предусмотрен.
Вот надо понимать, что не в VB не предусмотрен вызов конструктора с параметрами, а всё намного глубже. COM предусматривает кучу способов создания объектов. И тут у программиста/архитектора огромное раздолье: и моникеры, и фабрики классов (свои и чужие) и персистентные объекты.
Естественно, если бы был навязано, что объекты обязаны быть экземплярами каких-то классов (на самом деле не обязаны) и обязаны иметь конструктор и обязаны принимать параметры для конструктора определённым способом — были бы недовольные, и это было бы не так хорошо. Поэтому поступили совершенно по-другому.
Тем не менее, в рамках ActiveX-технологии (которая представляет собой как бы подмножество COM-мира) есть способ-создания-объектов-по-умолчанию. Никто не навязывает использовать именно его. Кроме того, есть немного отличающийся. Программист свободен в выборе. Но тем не менее, способ-создания-объектов-по-умолчанию — это фабрика классов, поддерживающая интерфейс
IClassFactory.
И вот IClassFactory действительно не предполагает создание объектов с передачей каких-то данных (конструктору). IClassFactory создан с идей о том, что это должен быть абсолютный минимум, необходимый только для того, чтобы какой-то минимум был прописан («законодательно») и применимый в случае создания объектов, конструкторы которых не ожидают параметров.
Предполагалось, что все будут создавать свои собственные фабрики классов для порождения объектов в том стиле, в каком это нужно в конкретном случае.
Единственная ошибка, это то, что общепринятного и общерекомендуемого способа (типа IClassFactoryEx) для конструкторов с параметрами они не создали (тут есть причина, о которой можно рассказывать отдельно). И ещё есть мир, который не хочет жить настолько хорошо, насколько это возможно. Потому что мир, который мы имеем, хочет жить по немного другому принципу: он хочет жить настолько просто, насколько это возможно.
Поэтому дали людям возможность называть свои контролы как им угодно, но осталось куча пофигистично настроенных людей, у которых все проекты называются Project1, все формы называются Form1, Form2 и т.д, а все контроллы — Command1 и Label1. Потому что им так проще и они не видят необходимости давать названия, если и без того всё
вроде бы работает.
Вот так и тут. Простой IClassFactory очень скоро стал почти стандартом. Функция в стиле «быстрая обёртка», называющаяся CoCreateInstance, предназначенная для создания объектов, конструкторы которых точно не имеют параметров, — тоже стала очень популярной.
Так и получилось всё то, как оно получилось: по принципу «хотели как лучше, а получилось...».