我可以使用VS2010 PrivateObject来访问静态类中的静态字段吗?

时间:2011-03-09 16:00:36

标签: c# .net visual-studio-2010

是否可以使用VS2010 Unit Test类PrivateObject访问静态类中的私有静态字段?

假设我有以下课程:

public static class foo
{
    private static bar;
}

我可以使用PrivateObject创建 foo 的副本,然后获取 bar 字段吗?< / p>

3 个答案:

答案 0 :(得分:30)

PrivateType类类似于PrivateObject,用于调用私有静态成员。可以使用重载的GetStaticFieldOrProperty方法。 http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.privatetype(v=VS.100).aspx

答案 1 :(得分:7)

Deepun的回答非常有用。我想添加一个具体的例子来帮助那些来这种方式的人。

具有私有静态成员的类。

public class foo
{
   private static int bar;
}

获取价值的代码。

PrivateType pt = new PrivateType(typeof(foo));
int bar = (int)pt.GetStaticFieldOrProperty("bar");

更改值的代码

PrivateType pt = new PrivateType(typeof(foo));
pt.SetStaticFieldOrProperty("bar", 10);

无论该类是否为静态,这都可以正常工作。

答案 2 :(得分:6)

可以使用反射检索属性值。这需要使用Type.GetField Method (String, BindingFlags)FieldInfo.GetValue Method

string propertyName = "bar";
FieldInfo fieldInfo = typeof(foo).GetField(propertyName, BindingFlags.NonPublic | BindingFlags.Static);
object fieldValue = fieldInfo.GetValue(null);