C # - Propriedades internas “legíveis” no quickwatch, mas sem usar reflexão?
Vejo que a janela "Quick Watch" tem acesso a todas as propriedades, independentemente de restrições de acesso (internas, protegidas, privadas) de uma classe em uma biblioteca, mesmo quando a biblioteca é referenciada em um aplicativo, lib e espaço para nome totalmente diferentes. Considerando que não estou encontrando uma maneira de acessá-los usando "reflexão". Estou especialmente tentando "ler" (observe - apenas leia) a propriedade interna de uma montagem. Se isso não for possível através do design de como "interno" funciona (não acessível fora do mesmo espaço para nome), como é que ele é "lido" pela janela "Observação rápida" em VS.NET
Aqui está o código de exemplo que eu usei:
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!"; }
}
}
}
Quando crio um objeto para a classe TestInernalProp, posso ver todas as 4 propriedades no quickwatch -
E quando eu uso a reflexão para acessar qualquer uma delas, exceto a propriedade pública (PropertyPublic), recebo uma exceção de referência nul
//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)
Não sei ao certo como o "Quick Watch" pode obter acesso a ele