创建主类的对象,该对象依次实例化其其他成员类

本文关键字:对象 实例化 成员类 其他 创建 | 更新日期: 2023-09-27 18:26:06

有没有办法只创建包含其他类的Main类的对象。

 public class City
{
    public int CityId { get; set; }
    public string CItyName { get; set; }
}
  public class State
{
    public int StateId { get; set; }
    public string StateName { get; set; }
}`
 public class CurrentPresident
{
    public int PresidentId { get; set; }
    public string PresidentName { get; set; }
}
 public class Country
{
    public int CountryId { get; set; }
    public CurrentPresident President { get; set; }
    public IList<State> States { get; set; }
    public IList<City> Cities { get; set; }
}

我有四个不同的班级,我的乡村班有不同的班级作为成员现在我只想创建Country类的对象,而不是Country类中的其他类。

Country country=new Country();

为了更清楚地表明,我不想创建City、State和CurrentPresident类的对象。我只想创建Country类的对象,它反过来也实例化Country类中的其他类。

非常感谢

创建主类的对象,该对象依次实例化其其他成员类

尽管不确定原因,但如果在创建Country时不想创建其他对象,请使Country内的getter返回一个私有字段,并初始化getter中的字段。这样,属性只会在您第一次访问时创建,而不是在国家/地区的ctor中创建,因为它们是在您访问它们时创建的,所以您不需要在国家/地方之外创建它们。

public class Country
{
    ....
    public CurrentPresident President 
    { 
        get
        {
            if (_president == null)
            {
                _president = new CurrentPresident();
            }
            return _president;
        } 
        //no setter as outside objects don't need to create them
    }
    ....
    private CurrentPresident _president
}

您的国家/地区类别应遵循

public class Country
{
    public int CountryId { get; set; }
    public CurrentPresident President { get; set; }
    public IList<State> States { get; set; }
    public IList<City> Cities { get; set; }
    public Country()
    {
          States = new List<State>();
          Cities =new List<City>();
    }
}

并不是说当您使用对象初始化时它将不起作用。在那里你需要使用一些技巧。

据我所知,您希望创建一个Country,但不填充类的内容。换句话说,你希望这个国家是空的,并且在创建时可以使用。

您可以使用构造函数来实现这一点:

public class Country
{
    public int CountryId { get; set; }
    public CurrentPresident President { get; set; }
    public IList<State> States { get; set; }
    public IList<City> Cities { get; set; }
    public Country()
    {
       this.CountryId = 0;
       this.CurrentPresident = null; // Country is brand new, no president elected :-)
       this.States = new List<State>();
       this.Cities = new List<City>();
    }
}

您必须在主对象构造函数内实例化所有内部对象。例如:

public class City
{
    public int CityId { get; set; }
    public string CItyName { get; set; }
}
public class State
{
    public int StateId { get; set; }
    public string StateName { get; set; }
}
public class CurrentPresident
{
    public int PresidentId { get; set; }
    public string PresidentName { get; set; }
}
public class Country
{
    public Country()
    {
        this.President = new CurrentPresident();
        this.States = new List<State>();
        this.Cities = new List<City>();
    }
    public int CountryId { get; set; }
    public CurrentPresident President { get; set; }
    public IList<State> States { get; set; }
    public IList<City> Cities { get; set; }
}

请记住,尽管每个对象都存在,但里面的所有对象仍然是空的(没有PresidentId、空Lists等)

根据需要,您可能希望创建具有不同参数的不同构造函数。例如,您可能希望在创建Country时提供CurrentPresident,以便它始终具有有效数据。