C # - Внутренние свойства «читаемые» в QuickWatch, но не с использованием отражения?

Я вижу, что окно «Быстрый просмотр» имеет доступ ко всем свойствам, независимо от ограничений доступа (внутренних, защищенных, закрытых) для класса в библиотеке, даже если на библиотеку ссылаются совершенно другое приложение, библиотека и пространство имен. Принимая во внимание, что я не нахожу способ получить к ним доступ, используя «отражение». Я особенно пытаюсь «прочитать» (заметьте - просто прочитайте) внутреннее свойство сборки. Если это невозможно из-за того, как работает «внутреннее» (недоступно за пределами того же пространства имен), почему оно «читается» окном «Быстрый просмотр» в VS.NET?

Вот пример кода, который я использовал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestLib
{
    public class TestInteralProp
    {
        internal string PropertyInternal
        {
            get { return "Internal Property!";  }
        }

        protected string PropertyProtected
        {
            get { return "Protected Property!"; }
        }

        string PropertyPrivate
        {
            get { return "Private Property!"; }
        }

        public string PropertyPublic
        {
            get { return "Public Property!";  }
        }

        protected internal string PropertyProtectedInternal
        {
            get { return "Protected Internal Property!"; }
        }
    }
}

Когда я создаю объект для класса TestInernalProp, я вижу все 4 свойства в QuickWatch -

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

//this works
propTestObj.GetType().InvokeMember("PropertyPublic", System.Reflection.BindingFlags.GetProperty, null, propTestObj, null);
//this fails (obviously)
propTestObj.GetType().InvokeMember("PropertyInternal", System.Reflection.BindingFlags.GetProperty, null, propTestObj, null);

//this works
propTestObj.GetType().GetProperty("PropertyPublic").GetValue(propTestObj, null);
//this fails again
propTestObj.GetType().GetProperty("PropertyInternal").GetValue(propTestObj, null)

Мне не ясно, как "Quick Watch" могут получить доступ к ним.

Ответы на вопрос(1)

Ваш ответ на вопрос