Но сборка совсем не обязательно должна быть исполняемым файлом с расшире нием .ехе. Сборки могут быть также в файлах динамически компонуемых библиотек (DLL) с расширением .dll. Так, если скомпилировать исходный файл MyClasses.cs в следующей командной строке: csc /t:library MyClasses.es
то в итоге получится файл MyClasses.dll. Преимущество размещения кода в библи отеке DLL заключается, в частности, в том, что в этом случае метод Main в исходном коде не нужен, тогда как всем исполняемым файлам требуется определенная точка входа, с которой должно начинаться выполнение программы. Именно поэтому класс Demo содержит метод Main в качестве такой точки входа. А для библиотеки DLL ме тод Main не требуется. Если же класс MyClass нужно превратить в библиотеку DLL, то в вызов метода LoadFrom придется внести следующее изменение. Assembly asm = Assembly.LoadFrom("MyClasses.dll"); Полностью автоматизированное обнаружение типов
Прежде чем завершить рассмотрение рефлексии, обратимся к еще одному поучи тельному примеру. Несмотря на то что в программе из предыдущего примера класс MyClass был полноценно использован без явного указания на его имя в программе, этот пример все же опирается на предварительную осведомленность о содержимом класса MyClass. Так, в программе были заранее известны имена методов Set и Sum из этого класса. Но с помощью рефлексии можно воспользоваться типом данных, ниче го не зная о нем заранее. С этой целью придется извлечь все сведения, необходимые для конструирования объекта и формирования вызовов соответствующих методов. Та кой подход может оказаться пригодным, например, при создании инструментально го средства визуального проектирования, поскольку он позволяет использовать типы данных, имеющиеся в системе.