gpt4 book ai didi

c# - 在不修改原始类的情况下访问类保护字段

转载 作者:行者123 更新时间:2023-11-30 14:15:36 26 4
gpt4 key购买 nike

我正在使用一些公开某种类型(通过方法返回)的第 3 方库。

此类型有一些我感兴趣的 protected 字段,但我无法使用它们,因为它们的可见性受到保护

这里是问题的简化:

public class A
{
protected object Something;

public A Load()
{
return new A();
}
}

public class ExtendedA : A
{
public void DoSomething()
{
// Get an instance.
var a = Load();

// Access protected fields (doesn't compile).
a.Something = ....
}
}

有什么简单的方法可以做到这一点吗?

最佳答案

描述

您可以使用 this.Something 访问字段,因为您的类派生自 class A

如果您想创建 A 类 的实例,而不是您的派生类,您只能使用反射访问该字段。

使用反射的示例

public class ExtendedA : A
{
public void DoSomething()
{
// Get an instance.
var a = Load();

//get the type of the class
Type type = a.GetType();
BindingFlags bindingFlags = BindingFlags.Instance | BindingFlags.NonPublic;

// get the field info
FieldInfo finfo = type.GetField("Something", bindingFlags);

// set the value
finfo.SetValue(a, "Hello World!");

// get the value
object someThingField = finfo.GetValue(a);
}
}

更多信息

关于c# - 在不修改原始类的情况下访问类保护字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9698195/

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