使用反射获取基类的受保护属性值

Mic*_*ski 5 c# dictionary

我想知道是否有可能访问位于对象的基类及其私有的ConfigurationId属性的值.我试图用反射没有运气来做它. 在此输入图像描述

Sae*_*ini 9

假设以下父类和子类:

class BaseClass
{
    private string privateField = "I'm Private";
}

class ChildClass : BaseClass
{

}
Run Code Online (Sandbox Code Playgroud)

您可以使用如下反射privateFieldChildClass实例读取值:

ChildClass childInstance = new ChildClass();
object privateFieldValue = childInstance.GetType().BaseType
    .GetField("privateField", BindingFlags.NonPublic | BindingFlags.Instance)
    .GetValue(childInstance);
Console.WriteLine(privateFieldValue); // I'm Private
Run Code Online (Sandbox Code Playgroud)


Mic*_*ski 8

要访问 ConfigurationId 属性,我使用了以下代码:

SubsetController controller = new SubsetController(new CConfigRepository(new FakeDataContextRepository()));

var myBaseClassProtectedProperty=
            controller.GetType().BaseType
                .GetProperty("CCITenderInfo", BindingFlags.NonPublic | BindingFlags.Instance)
                .GetValue(controller);

var myProtectedProperty =
            CCITenderInfo.GetType()
                .GetProperty("ConfigurationId", BindingFlags.Public |     BindingFlags.Instance)
                .GetValue(myBaseClassProtectedProperty);
Run Code Online (Sandbox Code Playgroud)