У меня есть требование создания дополнительных свойств в стороне объекта, как показано ниже (выделено), и я хотел бы сделать это одним движением, как показано ниже. Помимо создания отдельного объекта и привязки его к основному объекту.
Но это не присвоение значения, справка 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; }
}
}
Пара вариантов:
Измените свой инициализатор поля:
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;
}
}
Основное преимущество третьего варианта - создание подпункта задерживается до тех пор, пока свойство не будет восстановлено. Недостатком является то, что геттеры с побочными эффектами могут быть проблематичными.
Просто, чтобы добавить к @DStanley, чтобы упростить, вы можете просто
public Subtest Sub {
get
{
return _sub ?? (_sub = new Subtest());
}
set {
_sub = value;
}
}
SubProp
в вашем определении. На самом деле ваш пример кода и его использование имеют несколько отключений (Subprop3
- это строка, а не int и т. Д.).