0

我试图理解我们今天在课堂上讨论的一些代码,我们在下面创建了一个类,

    class Datapoint
    {
        private string latitude;
        private string longtitude;
        private string elevation;

        public Datapoint()
        {
            latitude = "no data";
            longtitude = "no data";
            elevation = "no data";
        }

        public Datapoint(string latitude, string longtitude, string elevation)
        {
            this.latitude = latitude;
            this.longtitude = longtitude;
            this.elevation = elevation;
        }

        public string Latitude { get { return latitude; } }
        public string Longtitude { get { return longtitude; } }
        public string Elevation { get { return elevation; } }
    }

然后从这门课上列出一个清单,

List<Datapoint> datapoints; 

这是一份清单吗

latitude 
longtitude
elevation
latitude 
longtitude
elevation
latitude 
longtitude
elevation
latitude 
longtitude
elevation

等等等等?感谢您的任何帮助。

4

5 回答 5

2

该列表存储Datapoint对象。它没有纬度、经度、海拔等的顺序。您可以Datapoint从列表中获取一个对象,然后按照您选择的任何顺序获取纬度、经度、海拔,如下所示:

Datapoint myPoint = datapoints[0];
Console.WriteLine(myPoint.latitude);
//etc for which ever measurement you want
于 2012-12-13T18:42:52.977 回答
2

似乎您认为Datapoint该类本身就是一种列表结构。虽然你可以这样想,但大多数程序员不会这样想。

一个更容易理解的实体可能是一个人。你认为一个人是一个列表,像这样吗?

  • 年龄
  • 性别
  • 高度
  • 重量
  • 发色
  • 眼睛的颜色

...等等?我想不是。一个人有很多属性或属性;但是,如果您考虑人员列表,则此列表不仅仅是人员属性的串联序列,而是人员实体(或实例)的串联序列。

因此,正如其他人所指出的那样,aList<Datapoint>或对象列表Datapoint不仅是这些对象的属性列表,而且实际上是对象本身的列表(每个对象都有属性)。


在较低级别上,如果您询问如何存储此信息,那么您实际上已经接近了。显然,要Datapoint在内存中分配一个对象,它的所有属性都必须有空间。并且这些很可能会被分配在一个连续的块中(尽管此时我们已经达到了大多数开发人员认为您甚至不应该出于编写软件的目的而考虑的实现细节水平——这是我将要讨论的另一个问题为别人存钱!)。

现在,您可能认为存储对象列表很有意义,Datapoint就像您建议的那样:

latitude  // first object
longitude
elevation
latitude  // second object
longitude
elevation
...       // etc.

但是,正如您可能已经在课堂上学到的那样,引用类型在 .NET 中并不是以这种方式存储的。给定一组对象,每个实例都可以存储在任何地方;你在 aList<Datapoint>实际上是一堆对这些对象的引用,就像我有这个列表一样:

  • 主街 123 号
  • 布罗德街 456 号
  • 栗子街 789 号

...这些地址的建筑物实际上不需要彼此相邻。

希望这可以帮助您理解 a 的List<Datapoint>实际含义:对对象的引用列表,这些对象具有属性,但传统上不被认为是列表本身(尽管在某种意义上它们是),并且可以分配并存在于不相邻的位置记忆中的点。

于 2012-12-13T18:46:15.577 回答
0

此列表将包含数据点的集合。此集合中的数据点将包含公共属性 Latitude、Longitude 和 Elevation。

于 2012-12-13T18:40:57.093 回答
0

这是您的 DataPoints 对象的列表。因此,如果您想获取每个对象的属性,您将首先访问列表中的对象。就像是:

foreach(DataPoint dp in datapoints)
{
    //do something with dp.Latitude
    //do something with dp.Longitude
    //do something with dp.Elevation
}
于 2012-12-13T18:44:08.963 回答
0
List<Datapoint> datapoints; 

此行初始化列表,但实际上不会将项目放入其中。然后,您需要从默认构造函数或自定义构造函数将项目添加到此列表中。像这样的东西。

Datapoint thePointToBeInserted = new Datapoint():   //this will cause it to create a Datapoint where the three properties are "no data".
theListOfDataPoints.Add(thePointToBeInserted);   //we add the object to the list.  
theListofDataPoints.Add(new DataPoint("Example latitude", "etc", "etc"));  //adding with custom constructor.
于 2012-12-13T18:50:57.380 回答