我之前在这里问了一个问题,但我没有正确解释所以我得到了错误问题的正确答案。
我正在创建一个类的实例,当我返回该类时,它会返回一些在我调用的类中是私有的结果。
我无法更改此课程并因各种原因将其公开。
我需要做的是枚举并获取所持有的Text变量的值:
public class StringReader
{
private string LongText = "this is the text i need to return";
private string Text;
public StringReader()
{
Text = LongText;
}
}
在方法中,我试图获取Text的值,我正在调用
StringReader sReader = new StringReader();
List<StringReader> readers = new List<StringReader>() { sReader};
读者有LongText和Text,但我很难获得文本值。
相反,它只是将类型返回给我。
答案 0 :(得分:3)
您需要使用反射来访问私有字段。您可以使用GetField(s)方法访问某个类型的所有字段。您可以使用GetValue function
访问其值public string GetLongText(StringReader reader)
{
// Get a reference to the private field
var field = reader.GetType().GetField("LongText", BindingFlags.NonPublic |
BindingFlags.Instance)
// Get the value of the field for the instance reader
return (string)field.GetValue(reader);
}
答案 1 :(得分:2)
声明为private
的字段在定义它们的类之外是不可访问的。如果没有
这里的用例是什么?你想要实现什么目标?如果您更一般地定义问题,我们可以提供更好的解决方案。
答案 2 :(得分:0)
如果不修改课程,使用最佳OOP练习是不可能的。它们被设置为私有,意味着它们只能在课堂内访问。您需要与班级的原始开发人员交谈,并询问为什么他们不能为私有领域制作公共获取者,如下所示:
public string getText(){
return this.Text;
}
这意味着字符串无法修改,但您至少可以阅读它。