Давайте предположим, что у меня есть класс ClassWithMember
class ClassWithMember
{
int myIntMember = 10;
}
Как я получаю значение по умолчанию 10 из myIntMember участника Системой. Ввести?
Я в настоящее время борюсь вокруг с отражениями всем, что я получаю, значение по умолчанию интервала (0) не участник значения по умолчанию классов (10)..
Вы можете попробовать что-то вроде этого:
var field = typeof(ClassWithMember).GetField("myIntMember",
BindingFlags.Instance | BindingFlags.NonPublic);
var value = (int)field.GetValue(new ClassWithMember());
Хитрость здесь в том, чтобы создать экземпляр.
Попробуйте создать экземпляр, чтобы получить значение с отражением.
Если вы контролируете код ClassWithMember, вы можете использовать совершенно другой подход к этому, используя атрибут [DefaultValue]
из System.ComponentModel
. По сути, вы должны написать что-то вроде этого:
class ClassWithMember
{
public ClassWithMember()
{
SetDefaultValues();
}
[DefaultValue(5)]
public MyIntMember { get; set; }
}
И затем иметь где-нибудь такую функцию, возможно, в базовом классе:
public void SetDefaultValues()
{
foreach (PropertyDescriptor prop in TypeDescriptor.GetProperties(this))
{
DefaultValueAttribute a = prop.Attributes[typeof(DefaultValueAttribute)] as DefaultValueAttribute;
if (a == null)
continue;
prop.SetValue(this, a.Value);
}
}
Итак, теперь у вас есть ситуация, когда вы можете легко получить значения по умолчанию, используя Отражение.
Имейте в виду, что это будет намного медленнее из-за требования Reflection, поэтому, если этот код создается часто, вы, вероятно, захотите найти другой подход. Кроме того, он не будет работать с типами, не являющимися значениями, из-за ограничений, связанных с поддержкой атрибутов .NET Framework.