Вопрос по static, gettype, c# – C # - как получить доступ к статическому члену класса, учитывая экземпляр этого класса?
В C # предположим, что у вас есть объект (скажем,myObject
) это экземпляр классаMyClass
.
Using myObject
только, как бы вы получили доступ к статическому членуMyClass
?
class MyClass
{
public static int i = 123 ;
}
class MainClass
{
public static void Main()
{
MyClass myObject = new MyClass() ;
myObject.GetType().i = 456 ; // something like this is desired,
// but erroneous
}
}
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.i
Чтобы немного проработать, чтобы использовать статический член, вы должны знать о классе. И наличие ссылки на объект не имеет значения. Единственный способ, которым объект будет иметь значение, - это когда у вас будет 2 разных класса, каждый из которых имеет одинаковый вид члена:
class A { public static int i; }
class B { public static int i; }
НоA.i
а такжеB.i
это совершенно разные поля, между ними нет логической связи. Даже если B наследует от A или наоборот.