Я вижу, что в окне «Быстрый просмотр» есть доступ ко всем свойствам, независимо от ограничений доступа (внутренних, защищенных, закрытых) для класса в библиотеке, даже когда на библиотеку ссылаются в совершенно другом приложении, lib иПространство имен.Принимая во внимание, что я не нахожу способ получить к ним доступ, используя «отражение».Я особенно пытаюсь «прочитать» (заметьте - просто прочитайте) внутреннее свойство сборки.Если это невозможно из-за того, как работает «внутреннее» (недоступно вне того же пространства имен), почему оно «читается» окном «Быстрый просмотр» в 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 -
![props](https://i.stack.imgur.com/1swSC.png)
И когда яиспользовать отражение для доступа к любому из них, кроме общедоступного свойства (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" могут получить к ним доступ.