C# — как делает один доступ статический участник класса, приведенный пример того класса?

Выезд Crap4j. Это - немного более сложный подход, чем прямое покрытие кода. Это комбинирует измерения покрытия кода с измерениями сложности, и затем показывает Вам, какой сложный код в настоящее время не тестируется.

9
задан JaysonFix 14 July 2009 в 14:12
поделиться

3 ответа

Вам придется использовать отражение:

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 , чтобы получить правильное значение.

25
ответ дан 4 December 2019 в 06:22
поделиться

Если у вас есть контроль над MyClass и вам нужно делать это часто, я бы добавил свойство члена, которое дает вам доступ.

class MyClass
{
    private static int _i = 123;

    public virtual int I => _i;
}
10
ответ дан 4 December 2019 в 06:22
поделиться

Вам просто нужно использовать: MyClass.i

Вкратце, чтобы использовать статический член, вы должны знать о классе. И ссылка на объект не имеет значения. Единственный способ, при котором объект будет иметь значение, - это когда у вас будет 2 разных класса, у каждого из которых одинаковый внешний вид:

class A { public static int i; }
class B { public static int i; }

Но Ai и Bi - это совершенно разные поля, нет логическая связь между ними. Даже если B наследуется от A или наоборот.

4
ответ дан 4 December 2019 в 06:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: