.NET: Расширить классы при загрузке или есть концепция загрузчиков классов?
Этот вопрос, вероятно, задавался сотни раз, но снова: есть ли концепция загрузчиков классов в.NET. И позвольте мне развить проблему: я не хочу вводить класс с несколькими дополнительными элементами кода, необходимыми для возможности включения объектов этого класса в разрабатываемую среду.
В Java я делаю это с помощью загрузчика классов, который читает байт-код, применяет необходимые модификации и предоставляет класс как экземпляр типа для приложения. Теперь объекты могут быть созданы путем отражения.
Это наверняка возможно и в.NET, если подумать. Таким образом, использование Type::GetType() вызывает TypeResolver текущего экземпляра AppDomain. В резольвере загружается исходный тип, который затем используется в качестве базового класса производного типа, созданного в динамической сборке. Это немного сложно, потому что производные типы не находятся в одной сборке, поэтому с внутренними классами не просто работать. Но это выполнимо и стабильно.
И теперь, назовите меня педантичным немецким языком, у меня есть загруженный оригинальный тип и производный тип, тогда как в Java у меня просто есть измененный тип. Смогу ли я сделать это в.NET?
1 ответ
Для того, чтобы сделать некоторую уборку здесь, это - то, что продолжало проблему.
На самом деле я презирал подход изменения существующих классов при загрузке. С точки зрения.NET, DynamicMethod с владельцем, установленным на расширяемый тип, справился бы с задачей. Однако вы не можете добавить объект данных таким способом - если это требование, вам нужно получить собственный класс с помощью Reflection.TypeBuilder. Обе концепции недоступны в.Net Standard (прежнем PCL).
Я настоятельно рекомендую вам связаться с DLR (динамическими метаобъектами) в случае, если у вас есть похожие требования - это концепция, которую я наконец начал использовать.