c#枚举来自类的新实例的值

时间:2015-07-31 09:38:22

标签: c# constructor enumeration

我之前在这里问了一个问题,但我没有正确解释所以我得到了错误问题的正确答案。

我正在创建一个类的实例,当我返回该类时,它会返回一些在我调用的类中是私有的结果。

我无法更改此课程并因各种原因将其公开。

我需要做的是枚举并获取所持有的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,但我很难获得文本值。

相反,它只是将类型返回给我。

3 个答案:

答案 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的字段在定义它们的类之外是不可访问的。如果没有

,你就无法阅读它们的价值
  1. 更改其知名度
  2. 添加具有公开可见性的访问者方法/属性
  3. 使用反射(不建议这样做,几乎总是有更好的方法)
  4. 这里的用例是什么?你想要实现什么目标?如果您更一般地定义问题,我们可以提供更好的解决方案。

答案 2 :(得分:0)

如果不修改课程,使用最佳OOP练习是不可能的。它们被设置为私有,意味着它们只能在课堂内访问。您需要与班级的原始开发人员交谈,并询问为什么他们不能为私有领域制作公共获取者,如下所示:

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

这意味着字符串无法修改,但您至少可以阅读它。