Назначение и вызов свойств объекта внутри другого объекта

1

У меня есть требование создания дополнительных свойств в стороне объекта, как показано ниже (выделено), и я хотел бы сделать это одним движением, как показано ниже. Помимо создания отдельного объекта и привязки его к основному объекту.

Но это не присвоение значения, справка pls.

   Test oTest=new oTest();
    oTest.Prop1=100;
    ***oTest.Sub.SubProp3="10";***

Классы определяются следующим образом:

public  class Test 
{
    public int Prop1{ get; set; }
    public int Prop2{ get; set; }

    private Subtest _sub = null;

    public Subtest Sub {
        get
        {
            return (_sub != null) ? _sub : new Subtest();
        }
        set {  
            _sub = value; 
        }
    }
  }

    public class Subtest
            {
              public int SubProp1{ get; set; }
              public int SubProp2{ get; set; }

              private string _SubProp3;

              public string SubProp3
              {
                get { return _SubProp3; }
                set { _SubProp3= value; }
              }
            }
Теги:
class
properties
instance
getter-setter

2 ответа

4
Лучший ответ

Пара вариантов:

  • Измените свой инициализатор поля:

    private Subtest _sub = new Subtest();
    
  • Установите новое значение при построении:

    public Test()
    {
        _sub = new Subtest();
    }
    
  • Установите новое значение при получении:

    public Subtest Sub {
        get
        {
            if(_sub == null)
                _sub = new Subtest();
            return _sub;
        }
        set {  
            _sub = value; 
        }
    }
    

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

  • 0
    Я предпочитаю последний вариант, но он не будет устанавливать oTest.SubProp.SubProp3 = 10. это всегда ноль. ??
  • 0
    Я не вижу свойство SubProp в вашем определении. На самом деле ваш пример кода и его использование имеют несколько отключений ( Subprop3 - это строка, а не int и т. Д.).
Показать ещё 1 комментарий
0

Просто, чтобы добавить к @DStanley, чтобы упростить, вы можете просто

    public Subtest Sub {
get
{
   return _sub ?? (_sub = new Subtest());
}
set {  
    _sub = value; 
}

}

  • 0
    Моя настоящая проблема заключается в установке значения для prop3 в объекте подтеста, как показано ниже oTest.Sub.SubProp3 = "10". который все еще нулевой
  • 0
    Просто сделайте то же самое для prop3, как только вы попытаетесь вызвать SubTest, он создаст его экземпляр, а затем, когда вы вызовете prop, он тоже будет создан. так что даже если вы сделаете test.Subtest.Prop, он будет доступен
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню