Переменные класса C # в таблице свойств? [не сеттер / геттер] - PullRequest
0 голосов
/ 14 сентября 2011

Я посмотрел почти везде, но не могу найти что-то более страшное. Я создаю редактор уровней для игры, в которой я хочу выбрать объекты и показать их переменные в сетке свойств, чтобы редактировать их во время выполнения.

Вот пример класса:

public class InteractiveObject
{
    public Vector2 location = Vector2.Zero;
    public  float _width = 0;
    public  float _height = 0;


    virtual public float width
    {
        get
        {
            return _width;
        }
        set { _width = value; }
    }

    virtual public float height
    {
        get
        {
            return _height;
        }
        set { _height = value; }
    }

}

Сетка свойств показывает только ширину и высоту прямо сейчас. Я связываю класс с сеткой свойств следующим образом:

InteractiveObject obj = new InteractiveObject();
propertyGrid.SelectedObject = obj;

Есть идеи, как отобразить переменные и отразить изменения, внесенные в правильную сетку, обратно к объекту? Спасибо.

1 Ответ

0 голосов
/ 14 сентября 2011

Вместо этого вы должны сделать эти элементы (location, width, height) свойствами, а также сделать их виртуальными, как и другие свойства.Этот класс выглядит так, как будто он должен быть базовым классом, от которого наследуются другие вещи, и вы ограничиваете их возможность настраиваться, прикрепляя эти элементы как открытые члены, а не как общие виртуальные свойства.

Когда этоВиртуальное свойство, происходят две вещи:

  1. весь доступ должен поступать через get / set, потому что член класса не является общедоступным
  2. , который может быть настроен подклассами

Даже если вы делаете это не по какой-либо другой причине, кроме возможности поставить точку останова отладки или какой-либо диагностический вывод в свойстве, это, вероятно, того стоит.

Кроме того, он мгновенно будет работать ссетка свойств, о которой вы упоминаете (я полагаю).

При этом рефлексия должна быть в состоянии предоставить вам открытых членов, поэтому теоретически вы можете улучшить эту PropertyGrid (если это ваш код) или написать свой (если этонет) это будет отображать как свойства, так и открытые члены.

...