C #: свойства с разными типами возврата в производных классах

я попытался найти ответ на эту проблему, но не смог найти многого, скорее всего, потому что я не знаю, как правильно его искать, так что вот оно. Любая помощь очень ценится.

С базовым классом, который выглядит как

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-подобного варианта тоже звучит не очень уместно.

Заранее большое спасибо.

РЕДАКТИРОВАТЬ:

Я должен был добавить подробности того, что я пытаюсь сделать. Свойства отображаются в приложении Winforms. Различные текстовые поля представляют разные свойства и фильтруются для правильного ввода (в зависимости от типа). Обновленные значения считываются и сохраняются. Объект контейнера будет сериализован в JSON и десериализован на клиенте Android и iPhone, и в конечном итоге эти значения будут переданы на уровень, на котором выполняется собственный код C ++, выполняющий материал OpenGL. Я не знаю заранее, какие свойства необходимы, поэтому как посредник я хотел сделать свой код как можно более надежным и при этом иметь возможность питать движок OpenGL.

7
задан alokoko 12 November 2011 в 23:52
поделиться