C#: Как создать атрибут на методе, инициировавшем событие, когда это вызывается?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

40
задан Matt 26 June 2018 в 11:57
поделиться

5 ответов

Единственным путем я знаю, как сделать, это с PostSharp. Это выполняет последующую обработку Ваш IL и может сделать вещи как то, что Вы попросили.

17
ответ дан Community 27 November 2019 в 01:49
поделиться

Вам нужна своего рода Аспектно-ориентированная платформа. PostSharp сделает это, как будет Виндзор .

В основном, они разделяют Ваш объект на подклассы и переопределяют этот метод...

тогда это становится:

//proxy
public override void DoSomeStuff()
{
     if(MethodHasTriggerAttribute)
        Trigger();

     _innerClass.DoSomeStuff();
}

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

10
ответ дан Ben Scheirman 27 November 2019 в 01:49
поделиться

Можно использовать ContextBoundObject и IMessageSink. См. http://msdn.microsoft.com/nb-no/magazine/cc301356 (en-us) .aspx

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

3
ответ дан Hallgrim 27 November 2019 в 01:49
поделиться

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

Тогда прокси-класс может инициировать событие каждый раз, когда приписанные методы называют.

0
ответ дан wprl 27 November 2019 в 01:49
поделиться

Атрибут дает информацию, они - метаданные. Я не знаю о способе сделать это бесцеремонно, кто-то мог бы.

Вы могли посмотреть на частичные методы в.NET, которые позволяют Вам делать некоторую легкую обработку событий. Вы обеспечиваете рычаги и позволяете кому-то еще обработать реализацию. Если метод не реализован, компилятор просто игнорирует его.

http://msdn.microsoft.com/en-us/library/wa80x488.aspx

0
ответ дан Nick 27 November 2019 в 01:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: