Можно ли использовать атрибут для переопределения метода? - PullRequest
3 голосов
/ 11 марта 2012

Например, можно ли пометить класс «Man» атрибутом «PetOwner», который переопределяет конструктор чем-то, что создает объект «Dog», а также вызывает базовый конструктор «Man»?

(И переопределяет метод 'GoForWalk ()' человека, чтобы включить взаимодействие с его собакой?)

Я довольно новичок в Reflection, и мне было любопытно, поэтому я подумал, что могу спросить,Это как-то связано с Reflection.Emit?

Я также взглянул на этот вопрос, но я не думаю, что он полностью связан с тем, что я спрашиваю (и я тоже не до конца понимаю).

Спасибо за любую помощь!:)

РЕДАКТИРОВАТЬ: Этот вопрос выглядит аналогично тому, что я собираюсь

1 Ответ

2 голосов
/ 11 марта 2012

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

.NET Framework и C # допускают различные способыпереопределения кода / изменения поведения, но все зависит от того, когда доступна информация для переопределения;во время разработки (-> типичная OO-конструкция), после этапа компиляции (-> аспектно-ориентированное программирование) или во время компиляции (-> отражение / динамические характеристики).

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

...