Выезд Crap4j. Это - немного более сложный подход, чем прямое покрытие кода. Это комбинирует измерения покрытия кода с измерениями сложности, и затем показывает Вам, какой сложный код в настоящее время не тестируется.
Вам придется использовать отражение:
Type type = myObject.GetType();
FieldInfo field = type.GetField("i", BindingFlags.Public |
BindingFlags.Static);
int value = (int) field.GetValue(null);
Я бы обычно старался избегать этого, хотя ... он очень хрупкий. Вот альтернатива с использованием обычного наследования:
public class MyClass
{
public virtual int Value { get { return 10; } }
}
public class MyOtherClass : MyClass
{
public override int Value { get { return 20; } }
}
и т. Д.
Затем вы можете просто использовать myObject.Value
, чтобы получить правильное значение.
Если у вас есть контроль над MyClass и вам нужно делать это часто, я бы добавил свойство члена, которое дает вам доступ.
class MyClass
{
private static int _i = 123;
public virtual int I => _i;
}
Вам просто нужно использовать: MyClass.i
Вкратце, чтобы использовать статический член, вы должны знать о классе. И ссылка на объект не имеет значения. Единственный способ, при котором объект будет иметь значение, - это когда у вас будет 2 разных класса, у каждого из которых одинаковый внешний вид:
class A { public static int i; }
class B { public static int i; }
Но Ai
и Bi
- это совершенно разные поля, нет логическая связь между ними. Даже если B наследуется от A или наоборот.