c#从类的新实例中枚举值
本文关键字:实例 枚举 新实例 | 更新日期: 2023-09-27 18:05:47
我之前在这里问了一个问题,但是我没有正确解释,所以我对错误的问题得到了正确的答案。
我正在创建一个类的实例,当我得到类返回时,它返回一些结果,这些结果在我调用的类中是私有的。
由于各种原因,我无法更改这个类并使其公开。
我需要做的是枚举并获得保存的Text变量的值:
public class StringReader
{
private string LongText = "this is the text i need to return";
private string Text;
public StringReader()
{
Text = LongText;
}
}
在方法中,我试图获得文本的值,我调用
StringReader sReader = new StringReader();
List<StringReader> readers = new List<StringReader>() { sReader};
读者有长文本和文本,但我正在努力得到文本值回来。
它只是将Type返回给我。
您需要使用反射来访问私有字段。您可以使用GetField方法访问一个类型的所有字段。您可以使用GetValue函数
访问它们的值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);
}
声明为private
的字段在定义它们的类之外是不可访问的。如果没有
- 改变它们的可见度
- 添加具有公共可见性的访问方法/属性
- 使用反射(这是不推荐的,几乎总是有更好的方法)
这里的用例是什么?你想达到什么目标?
不修改类,就不可能使用最佳OOP实践。它们被设置为private,这意味着它们只能在类内部访问。你需要与类的原始开发人员交谈,并询问他们为什么不能为私有字段创建一个像这样的公共getter:
public string getText(){
return this.Text;
}
这意味着字符串不能被修改,但你至少可以读取它