Есть ли способ автоматически добавлять код-обертку ко всем открытым функциям класса? - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть класс C #.(Обратите внимание, что это просто для иллюстрации проблемы. Реальный код более сложен, чем этот.)

class MyClass
{
    private readonly MyCustomData myData = new MyCustomData();
    private int flarnCount = 0;
    /* Redacted more data structures. */

    public string One                             => myData[1];
    public List<string> Evens                     => myData.Where(item => item.Key % 2 == 0).Select(item => item.Value).ToList();
    public void SetValue(int index, string value) => myData[index] = value;
    public void Flarn()                            { flarnCount+=1; myData[flarnCount] += 12; }

    /* Redacted several hundred other similar functions. */
}

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

private readonly object mon = new object();

.. и добавляю команду lock (mon) к каждой публичной функции.

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

Есть ли способЯ могу сказать компилятору включить одну и ту же оболочку во все публичные функции?

ОБНОВЛЕНИЕ - я мог бы также спросить, как добавить один и тот же блок try / catch ко всем публичным функциям.Пожалуйста, не зацикливайтесь на самой проблеме блокировки, которая только иллюстрирует проблему.

...