-4

我有一个名为“土地”的班级,它是学校的父班级。还有另一个独立的类别“城市”,其中包含所有土地类别的总人口。

点是学校不能继承城市的信息,有没有办法可以从班级学校访问城市的信息?

我的尝试是 private City city = new City();然后city.Population提取人口信息,但这没有奏效。有什么建议么?

4

1 回答 1

4

您似乎混淆了is-a(继承)和has-a(组合)。ASchool位于 a 中City,而 a 又位于 aCountryLand中。对我来说,这看起来是一个明智的设计:

class Land
{
    public string Name { get; private set; }

    public Land(string name)
    {
        this.Name = name;
    }
}

class City
{
    public string Name { get; private set; }
    public Land Land { get; private set; }
    public int Population { get; private set; }

    public City(string name, int population, Land land)
    {
        this.Name = name;
        this.Population = population;
        this.Land = land;
    }
}

class School
{
    public string Name { get; private set; }
    public City City { get; private set; }

    public School(string name, City city)
    {
        this.Name = name;
        this.City = city;
    }
}

您可以通过以下方式使用它:

var land = new Land("Foo");
var city = new City("BarCity", 9001, land);
var school = new School("BazSchool", city);

现在您可以访问学校所在城市的人口school.City.Population

如您所见,我们现在有三个包含Name属性的类。例如,您可以将其提取到一个新的(抽象)类中NamedEntity,并让所有其他三个类都继承自这个类,作为每个is-a命名实体。

但正如我从评论中得知的那样,这个问题是从一项编程任务中提出的,旨在教你这些原则。然而你声称没有时间学习这个。你打算如何完成你的下一个编程任务?

于 2013-05-16T07:58:47.413 回答