Используйте отражение, чтобы найти все общедоступные виртуальные методы и обеспечить переопределение - PullRequest
3 голосов
/ 19 июля 2011

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

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

Ответы [ 2 ]

3 голосов
/ 19 июля 2011
typeof(MyClass)
    .GetMethods(BindingFlags.Public | BindingFlags.Instance)
    .Where(m => m.IsVirtual);
2 голосов
/ 19 июля 2011

MethodBase имеет Свойство IsVirtual .

MethodBase m = typeof(MyClass).GetMethod("MyMethod");
if (m.IsVirtual)
  // yada-yada-yada...
...