.NET Reflection Создать свойства класса - PullRequest
1 голос
/ 28 апреля 2009

Я довольно новичок в рефлексии, и я хотел бы узнать, если возможно, как создать экземпляр класса, затем добавить свойства в класс, установить эти свойства, а затем прочитать их позже. У меня нет никакого кода, поскольку я даже не знаю, как начать делать это. C # или VB в порядке.

Спасибо

РЕДАКТИРОВАТЬ: (чтобы уточнить)

В моей системе есть создатель динамических форм. один из моих партнеров требует, чтобы данные формы были доступны через веб-сервис. Моя идея состояла в том, чтобы создать класс (на основе динамической формы), добавить свойства в класс (на основе полей форм), установить эти свойства (на основе значений, введенных для этих полей), а затем вернуть класс в веб-сервисе.

Кроме того, веб-сервис сможет устанавливать свойства в классе и в конечном итоге фиксировать эти изменения в БД.

Ответы [ 4 ]

7 голосов
/ 28 апреля 2009

Если вы имеете в виду динамическое создание класса, то есть два варианта:

  • Reflection.Emit - Сложно, быстро создать класс
  • CodeDom - Менее сложно, медленнее создать класс

Если вы имеете в виду создание экземпляра существующего класса, начните с Activator.CreateInstance , чтобы создать экземпляр объекта, а затем посмотрите на методы Тип , такие как GetProperty , который вернет PropertyInfo , который можно вызвать GetValue и SetValue on.


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

(Обратите внимание, что когда я говорю «вернуть какой-то словарь», я говорю скорее образно, чем буквально, то есть возвращаю что-то, что концептуально совпадает со словарем, например список пар ключ-значение. Я бы не рекомендовал напрямую возвращая один (даже если вы используете WCF, который поддерживает это), потому что обычно лучше иметь полный контроль над возвращаемым вами XML.)

1 голос
/ 29 апреля 2009

Я знаю, что это слишком упрощается, если не просто KISS и генерировать требуемый Xml для возврата через веб-службу, а затем анализировать возвращенный Xml для заполнения базы данных.

Мое рассуждение состоит в том, что по расширенной причине, которую вы предлагаете сделать, я вижу значение или причину, по которой нужен динамический класс?

1 голос
/ 28 апреля 2009

В главе Генерация кода времени выполнения в книге Эрика Ганнерсона (Введение программиста в C #) есть много полезной информации по этой теме. Смотрите страницу 14 и далее в частности. Он описывает два основных метода генерации динамического класса / кода (CodeDOM и пространство имен Reflection.Emit). Также обсуждаются сложность и эффективность двух подходов. Прочтите это, и вы должны найти все, что вам может понадобиться.

0 голосов
/ 28 апреля 2009

Вопрос в том, для чего вам нужны эти свойства?

Какие будут варианты использования? Вам нужно как-то привязать эти свойства к интерфейсу? Используете какие технологии? (WPF, Windows Forms?)

Это просто, что вам нужно собрать набор пар ключ / значение во время выполнения? Тогда, может быть, простой словарь поможет.

Пожалуйста, уточните, если это возможно, о том, что вам нужно, и я уверен, что люди здесь могут найти множество способов помочь вам, но трудно дать хороший ответ без дополнительного контекста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...