Выполнить какой-то конкретный код перед функциями-членами класса, используя атрибуты? - PullRequest
2 голосов
/ 23 апреля 2009

У меня есть класс:

public class MyClass
{
  public int code { set; get; }
  public bool foo()
  {
    // do some stuff
    // ...
    code = 100;
    return true;
  }

  public bool bar()
  {
    // do some stuff
    // ...
    code = 200;
    return true;
  }

  // more methods ...
  // ...
}

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

[ResetTheCode]
public bool bar()
{
  // do some stuff
  // ...
  code = 200;
  return true;
}

Что-то похожее на фильтры действий в ASP.NET MVC. Это возможно?

Ответы [ 4 ]

3 голосов
/ 23 апреля 2009

Договорились с Кентом. Кроме того, взгляните на PostSharp , который также является очень зрелой средой .NET AOP.

2 голосов
/ 23 апреля 2009

AOP Framework позволит вам сделать это. Замок Виндзор , например.

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

Вы могли бы определенно сделать что-то подобное с AOP-фреймворком (например, PostSharp ), но не думаете ли вы, что это может привести в замешательство любого, кто не знаком с вашим процессом?

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

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

Атрибуты сами по себе ничего не делают, кроме как работают как маркер или метаданные для вашего кода. Вам нужно написать некоторый код отражения, чтобы получить атрибут и что-то с ним сделать.

AOP-фреймворк, такой как PostSharp , Castle Windsor и другие, выполняет оценку атрибутов на основе правил своей фреймворка.

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