gpt4 book ai didi

c# - 如何使用反射访问私有(private)基类字段

转载 作者:行者123 更新时间:2023-11-30 21:10:17 29 4
gpt4 key购买 nike

我正在尝试在 BaseClass 类型的变量上设置私有(private)“可见”字段。

  • 子类
    • 基类
      • “可见”字段

我已经成功访问​​了 ChildClass 类型的变量,以及 BaseClass 上“可见”字段的 FieldInfo。

但是当我尝试设置/获取字段的值时,出现错误 System.Runtime.Remoting.RemotingException: Remoting cannot find field 'visible' on type 'BaseClass'。

那么有没有一种方法可以将 ChildClass 类型的变量“向下转换”为 BaseClass 以使反射起作用?


编辑:我正在使用的确切代码:

// get the varible
PropertyInfo pi = overwin.GetProperty("Subject", BindingFlags.Instance|BindingFlags.Public);
CalcScene scene = (CalcScene) pi.GetValue(inwin, null);

// <<< scene IS ACTUALLY A TYPE OF DisplayScene, WHICH INHERITS FROM CalcScene

// get the 'visible' field
Type calScene = typeof(CalcScene);
FieldInfo calVisible = calScene.GetField("visible",BindingFlags.Instance|BindingFlags.NonPublic);

// set the value
calVisible.SetValue(scene, true); // <<< CANNOT FIND FIELD AT THIS POINT

确切的类结构:

class CalcScene  
{
private bool visible;
}

class DisplayScene : CalcScene
{
}

最佳答案

你可以这样试试

    class B
{
public int MyProperty { get; set; }
}

class C : B
{
public string MyProperty2 { get; set; }
}

static void Main(string[] args)
{
PropertyInfo[] info = new C().GetType().GetProperties();
foreach (PropertyInfo pi in info)
{
Console.WriteLine(pi.Name);
}
}

产生

    MyProperty2    MyProperty

关于c# - 如何使用反射访问私有(private)基类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8565413/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com