Есть у меня классы, у них открытые переменные. Я через reflection добираюсь до их значений для последующего отображения/изменения.
По умолчанию - есть некоторый диапазон для изменения, условно -+20%.
Но для некоторых переменных есть свои особенности: -10%/+20% или 0..100. Это исключения, они не многочисленны, но они есть.
Мне хочется, когда буду перебирать переменные, чтобы можно было прямо в коде задать для переменной свой атрибут или не знаю как это называется - описание, которое я мог бы пропарсить:
public int Length;
// Min: 0. Max: 100
public int Size;
[Range:20%]
public int Weight;
Чтобы было более наглядно: у Unity3D есть HideInInspector. Что-то похожее хочу сделать, но более информативно.
Ответ
Используйте для этого кастомные классы атрибутов, они для того и созданы, чтобы предоставлять мета-информацию об объектах в отражениях.
Например, вот атрибут, позволяющий задавать диапазон для полей:
[AttributeUsage(AttributeTargets.Field)]
class RangeAttribute : Attribute
{
public int Percent { get; set; }
public RangeAttribute (int percent)
{
Percent = percent;
}
}
Задавать значение диапазона на поле можно так:
class Foo
{
[Range(20)]
public int Bar;
}
Ну а дальше — отражения:
FieldInfo barField = typeof(Foo).GetField("Bar");
RangeAttribute barRange = barField.GetCustomAttribute
См.:
Attributes Tutorial (MSDN)
Writing Custom Attributes (MSDN)
Creating Custom Attributes (MSDN)
Комментариев нет:
Отправить комментарий