Laszlo Frank Ответов: 3

Сложные типы недвижимости


У меня есть класс с именем TerminalConnectionParameters, который содержит несколько различных типизированных полей, таких как имя хоста, IP-адрес, имя пользователя, пароль и т. д.

Я хочу использовать этот тип класса как свойство фиктивного класса, например :
public class Dummy
{
    private TerminalConnectionParameters _parameters;
    public TerminalConnectionParameters Parameters
    {
      get
      {
        // do some fancy calculation here
        return _parameters;
      }
      set
      {
        _parameters = value;
        // do some fancy calculation here
      }
    }
}


Это гарантирует, что я могу получить или установить весь класс параметров фиктивного объекта.
Пока все хорошо, но что, если я хочу использовать это свойство как :

objectDummy.Parameters.Hostname= "dummyRouter";


Конечно, этот оператор присваивания не будет устанавливать значение внутреннего поля _parameters dummyObject. Но что тогда ? И каков правильный способ реализации такого писателя свойств без необходимости создавать средство доступа к свойствам каждого поля TerminalConnectionParameters уникально ?
Я знаю о тривиальном способе, как показано ниже, но нет ли лучшего решения ?
TerminalConnectionParameters  temp = objectDummy.Parameters;
temp.HostName = "dummyRouter";
objectDummy.Parameters = temp;


И причина этого вопроса заключается в том, что я хочу использовать PropertyGrid для работы с внутренним объектом _parameters формы.

Что я уже пробовал:

Как описано в приведенном выше примере.

3 Ответов

Рейтинг:
24

Midi_Mick

На самом деле, ваш первый оператор присваивания хорош при условии, что ваш член _parameters был инициализирован - вы можете сделать это в объявлении

private TerminalConnectionParameters _parameters = new TerminalConnectionParameters();

или в геттере
private TerminalConnectionParameters _parameters = null;
    public TerminalConnectionParameters Parameters
    {
      get
      {
        if (_parameters - null)
            _parameters = new TerminalConnectionParameters();
        // do some fancy calculation here
        return _parameters;

Теперь, когда вы уверены в инициализации, все, что вам нужно сделать, это украсить Parameters свойство со следующим атрибутом, а дизайнер волшебным образом позаботится обо всем остальном:
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public TerminalConnectionParameters Parameters
{


Рейтинг:
0

#realJSOP

Вы можете сериализовать параметры в фиктивном объекте и десериализовать его в главном объекте.


Рейтинг:
0

Laszlo Frank

Спасибо Midi_Mick, вот и все. Почему-то я чувствовал, что это должно быть просто...:-)