Отражение защищенного члена класса - PullRequest
4 голосов
/ 07 декабря 2011
using System;
using System.Reflection;

namespace Reflection

{
    class Test
    {
        protected void methodname()
        {
            Console.WriteLine(("in the world of the reflection"));
            Console.Read();
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
           // BindingFlags eFlags = BindingFlags.Default | BindingFlags.Instance | BindingFlags.Public|BindingFlags.NonPublic;
            BindingFlags eFlags = BindingFlags.Instance|BindingFlags.NonPublic;
            Test aTest = new Test();
            MethodInfo mInfoMethod = typeof(Reflection.Test).GetMethod("methodname", eFlags);
            mInfoMethod.Invoke(aTest, null);

        }
    }
}

Согласно msdn BindingFlags.Nonpublic используется для доступа к не закрытым членам. Если я использую только это перечисление, Getmethod возвращает нулевое значение. Но если использовать enum - Instance и nonpublic, то требуемый метод вызывается. В чем разница между этими двумя. Когда я должен использовать экземпляр и публичную / непубличную комбинацию.

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

За документация GetMethod():

Вы должны указать BindingFlags.Instance или BindingFlags.Static, чтобы получить возврат.

Instance / Static и Public / NonPublic указывают две разные вещи, и вы должны указать обе, чтобы получить результат.

1 голос
/ 07 декабря 2011

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

  • Public или NonPublic (или оба)
  • Static или Instance (или оба)

(см.примечание в разделе замечаний по http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx)

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