Рефлексия: Определить метод он "virtual" или "override"
От: betauser  
Дата: 15.11.10 04:05
Оценка:
Есть .NET метод. С помощью рефлексии не могу найти, как определить этот метод он "virtual" или "override".
т.е. определить это метод является ли самого нижнего уровня или этот метод оверридится в потомке.

Конечно, можно найти подобный метод в родительских классах сравнением, но может быть есть способ простого/правильного определения?
Re: Рефлексия: Определить метод он "virtual" или "override"
От: Sinix  
Дата: 15.11.10 04:22
Оценка: 9 (3) +1
Здравствуйте, betauser, Вы писали:

B>Есть .NET метод. С помощью рефлексии не могу найти, как определить этот метод он "virtual" или "override".

B>т.е. определить это метод является ли самого нижнего уровня или этот метод оверридится в потомке.
Второй способ подсмотрел в http://stackoverflow.com/questions/2932421. Только он делает не совсем то, о чём вы просили.
      MethodInfo a = typeof(object).GetMethod("GetHashCode");
      MethodInfo b = typeof(string).GetMethod("GetHashCode");

      // Способ 1

      Console.WriteLine(
        "a.IsNewSlot? {0}",
        (a.Attributes & MethodAttributes.NewSlot) == MethodAttributes.NewSlot);
      Console.WriteLine(
        "a.IsVirtual? {0}", a.IsVirtual);

      Console.WriteLine(
        "b.IsNewSlot? {0}",
        (b.Attributes & MethodAttributes.NewSlot) == MethodAttributes.NewSlot);
      Console.WriteLine(
        "b.IsVirtual? {0}", b.IsVirtual);

      // Способ 2
      Console.WriteLine(a.DeclaringType == b.DeclaringType);
Re[2]: Рефлексия: Определить метод он "virtual" или "overrid
От: betauser  
Дата: 15.11.10 04:45
Оценка:
Спасибо! то что нужно.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.