Я пытался найти ответ для этой проблемы, но не смог найти много, скорее всего, потому что я не знаю, как правильно его искать, так что вот так. Вся помощь очень ценится.
С базовым классом, который выглядит как
abstract public class Property
{
private String name;
public Property(String propertyName)
{
name = propertyName;
}
public String Name
{
get { return name; }
}
abstract public override String ToString();
}
И производные классы, которые выглядят как
public class StringProperty : Property
{
private String value; // different properties for different types
public StringProperty(String propertyName, String value) : base(propertyName)
{
this.value = value;
}
public String Value // different signature for different properties
{
get { return value; }
}
public override String ToString()
{
return base.Name + ": " + value;
}
}
Во время выполнения функция получает коллекцию объектов «Свойство». Что мне нужно сделать, чтобы получить «ценность» каждого? Нужно ли иметь большой оператор if
для запроса типа каждого объекта «Свойство»? Если нет, есть ли более элегантное решение?
Я попытался определить абстрактное свойство «Значение», которое должно быть переопределено, но, поскольку возвращаемые типы отличаются, оно не сработало. Я также попытался поиграть с затенением свойства «Value», но не смог заставить его работать. Идея использования COM-подобного варианта тоже не очень уместна.
Заранее большое спасибо.
EDIT:
Я должен был добавить подробности о том, что я пытаюсь сделать. Свойства отображаются в приложении Winforms. Различные «TextBox» представляют разные свойства и фильтруются для правильного ввода (в зависимости от типа). Обновленные значения считываются и сохраняются. Контейнерный объект будет сериализован в JSON и десериализован на клиенте для Android и iPhone, и в конечном итоге эти значения будут переданы в слой с собственным кодом C ++, выполняющим OpenGL. Я не знаю заранее всех необходимых свойств, поэтому, как посредник, я хотел сделать свой код максимально надежным, в то же время имея возможность использовать движок OpenGL.