FieldAccessException при доступе к защищенному полю через отражение - PullRequest
1 голос
/ 07 апреля 2019

Почему я получаю FieldAccessException при попытке получить доступ к защищенному полю с отражением в следующем коде?

using System;
using System.Reflection;

public class Program
{
    public static void Main()
    {
        Foo foo = new Foo();

        BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.NonPublic 
                                | BindingFlags.Public | BindingFlags.Static;
        FieldInfo fieldInfo = foo.GetType().GetField("field", bindFlags);

        Object fieldValue = fieldInfo.GetValue(foo);
    }
}

public class Foo 
{   
    public Foo() {
        field = 1;  
    }

    protected int field;    
}

Эта скрипка дает мне исключение: https://dotnetfiddle.net/wu5vDX, но не должен 't флаги привязки удостоверяются, что я могу получить доступ к полю?

Редактировать: По-видимому, это только результат .Net Fiddle.Это происходит только в скрипке, а не в Visual Studio, например.

1 Ответ

3 голосов
/ 07 апреля 2019

Это ограничение, налагаемое DotNetFiddle , если не запускать код в Полное доверие (по соображениям безопасности). Следовательно, вы не можете использовать все возможности Reflection API.

С MSDN :

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

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