5

我正在对一个内部有 2 个私有成员变量的类进行单元测试。我创建了一个继承自我正在测试的类的类。

起初我只是制作了我想访问的变量,protected但我认为如果我可以将它们保持私有并使用反射来访问它们会很酷。我用谷歌搜索并找到了各种文章(& 在这里提出的问题(http://stackoverflow.com/questions/4097682/c-sharp-use-reflection-to-get-a-private-member-variable-from-a-derived -class)) 并且接受的答案不起作用。

链接的 SO 问题说:

// _commandCollection is an instance, private member
BindingFlags flags = BindingFlags.Instance | BindingFlags.NonPublic;

// Retrieve a FieldInfo instance corresponding to the field
FieldInfo field = GetType().GetField("_commandCollection", flags);

// Retrieve the value of the field, and cast as necessary
IDbCommand[] cc =(IDbCommand[])field.GetValue(this);

但是,没有GetField()方法。我尝试了一种看起来相似的方法,GetRuntimeField()但没有奏效。

我的代码(在继承类中)是:

public List<BaseData> RealAllData
{
    get
    {
        // Use reflection to access the private variable
        FieldInfo field = GetType().GetRuntimeField("mAllData");
        return (List<BaseData>)field.GetValue(this);
    }
}

如果有人知道为什么这不起作用,那么我将不胜感激。谢谢。

4

1 回答 1

1

您还可以将反射代码放入面向 .NET 4 和 Windows 应用商店应用的可移植类库中。然后,您将可以访问“旧”反射 API,包括 BindingFlags 等。

于 2012-10-24T00:30:10.650 回答