C# конструкторы сложных классов - PullRequest
0 голосов
/ 15 января 2020

У меня есть следующая система: «материнский» класс с именем DataClass, имеет свойства, и два из них являются классами PartClass и MemberClass. В частности, MemberClass имеет свойства, и одним из них является класс, SideClass - со своими собственными свойствами.

Вот пример кода:

using System;

namespace ConsoleApp
{
    public class DataClass
    {
        public int num { get; set; }
        public string code { get; set; }
        public PartClass part { get; set; }
        public MemberClass member { get; set; }

        public DataClass()
        {
            PartClass part = new PartClass();
            MemberClass member = new MemberClass();
        }
    }

    public class PartClass
    {
        public int seriesNum { get; set; }
        public string seriesCode { get; set; }

        public PartClass() { }
    }

    public class MemberClass
    {
        public int versionNum { get; set; }
        public SideClass side { get; set; }

        public MemberClass()
        {
            SideClass side = new SideClass();
        }
    }

    public class SideClass
    {
        public string firstDetail { get; set; }
        public string secondDetail { get; set; }
        public bool include { get; set; }

        public SideClass() { }
    }

Теперь я попытка инициализировать DataClass и присвоить значения всем свойствам, и это не работает. Таким образом, DataClass «владеет» PartClass, а MemberClass, а сам MemberClass «видит» SideClass, который является нижним классом и является своего рода независимым от всех. Вот остаток кода:

class Program
{

    static void Main(string[] args)
    {
    DataClass myData = new DataClass()
    {
        num = 13,
        code = "message",
        //from here downwards nothing works; error..
        part.seriesNum = 1,
        part.seriesCode = 7,
        member.versionNum = 9,
        member.side.firstDetail = "pass",
        member.side.secondDetail = "checked",
        member.side.include = true;
    }
}

}

Я думал, что при установке конструкторов и свойств экземпляр DataClass не будет иметь проблем, но на самом деле DataClass не видит никаких нетривиальные свойства (свойства, относящиеся к классам). Может ли кто-нибудь помочь мне, пожалуйста? Спасибо ..

Ответы [ 3 ]

3 голосов
/ 15 января 2020

Используйте следующее:

DataClass myData = new DataClass()
{
    num = 13,
    code = "message",
    part = new PartClass()
    {
        seriesNum = 1,
        //here down nothing works; error
        seriesCode = "abc"
    },
    member = new MemberClass()
    {
        versionNum = 9,
        side = new Side()
        {
            firstDetail = "pass",
            secondDetail = "checked",
            include = true
        }
    }
};
2 голосов
/ 15 января 2020

Чтобы не создавать экземпляр класса члена и класса детали вручную каждый раз, вы можете создавать экземпляры, используя методы get и set.

public class DataClass
{
    public int num { get; set; }
    public string code { get; set; }

    private PartClass _part;
    public PartClass part { get { if (_part == null) _part = new PartClass(); return _part; } set { _part = value; } }


    private MemberClass _member;
    public MemberClass member { get { if (_member == null) _member = new MemberClass(); return _member; } set { _member = value; } }

}
1 голос
/ 15 января 2020

вы должны создать экземпляр DataClass, а затем инициализировать поля

DataClass myData = new DataClass();

myData.num = 13,
myData.code = "message",
myData.part.seriesNum = 1,
myData.part.seriesCode = 7,
myData.member.versionNum = 9,
myData.member.side.firstDetail = "pass",
myData.member.side.secondDetail = "checked",
myData.member.side.include = true;
...