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返回给我。

c#从类的新实例中枚举值

您需要使用反射来访问私有字段。您可以使用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的字段在定义它们的类之外是不可访问的。如果没有

,就不能读取它们的值
  1. 改变它们的可见度
  2. 添加具有公共可见性的访问方法/属性
  3. 使用反射(这是不推荐的,几乎总是有更好的方法)

这里的用例是什么?你想达到什么目标?

如果你把你的问题定义得更笼统一些,也许我们可以给出一个更好的解决方案。

不修改类,就不可能使用最佳OOP实践。它们被设置为private,这意味着它们只能在类内部访问。你需要与类的原始开发人员交谈,并询问他们为什么不能为私有字段创建一个像这样的公共getter:

public string getText(){
    return this.Text;
}

这意味着字符串不能被修改,但你至少可以读取它