假设以下父类和子类:
class BaseClass
{
private string privateField = "I'm Private";
}
class ChildClass : BaseClass
{
}
Run Code Online (Sandbox Code Playgroud)
您可以使用如下反射privateField
从ChildClass
实例读取值:
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)
要访问 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)