【发布时间】:2013-05-18 23:13:02
【问题描述】:
好的...我试图理解整个面向对象的编程,但我总是陷入死胡同。 ;)
我正在尝试使用类来存储或者更确切地说将存储大量数据。我想通过使用具有多个属性的类来存储行星数据,然后将它们保存到列表中。
我的问题是我不知道如何使这个列表全局可访问,它只能在创建它的实例中访问。
下面是我的测试环境中的一些示例代码。
OrbitalBodies.cs
class OrbitalBodies
{
public int BodyID { get; set; }
public string BodyName { get; set; }
public int BodySize { get; set; }
public int BodyX { get; set; }
public int BodyY { get; set; }
}
From1.cs
public void button1_Click(object sender, EventArgs e)
{
var bodies0 = new OrbitalBodies();
var orbitalList = new List<OrbitalBodies>();
bodies0.BodyID = 4;
bodies0.BodyName = "Earth";
bodies0.BodySize = 125;
bodies0.BodyX = -450;
bodies0.BodyY = 75;
orbitalList.Add(bodies0);
bodies0.BodyID = 0;
bodies0.BodyName = "Sol";
bodies0.BodySize = 500;
bodies0.BodyX = 0;
bodies0.BodyY = 0;
orbitalList.Add(bodies0);
//var orbitalDic = new Dictionary<int, OrbitalBodies>();
MessageBox.Show("Planetary body name: " + Convert.ToString(orbitalList.Count()));
}
我花了几个小时在这里和其他地方查找我的问题,但我不知道如何访问我放入列表中的信息,而不是在那个单一实例中。我的实际应用程序将包含数以万计的轨道体和许多其他数据,这些数据必须可以通过多种形式甚至其他类访问。
我们将不胜感激,最好的解决方案是什么?完全不同吗?!?
【问题讨论】:
-
从应用程序设计的角度来看,您可能不希望它是全球性的。虽然一开始尝试确定它的正确范围并确保其范围在那个级别似乎更容易,但这种编程方法将您的整个应用程序变成了一堆意大利面条式代码,这些代码变得非常难以使用、理解和维护时间。另请注意,如果您在全局范围内公开此信息,则需要处理线程安全问题;那些可能是一个真正的痛苦。
-
@Servy 并不完全正确。许多东西,主要是在游戏开发中,使用静态数据来存储游戏(世界)或其他东西,这些东西在运行期间不会改变,或者需要随时随地都可以访问。
-
@MartinPerry 我并不是说你不应该让任何东西都可以在全球范围内访问,我只是说,在这种情况下,考虑到他正在做的事情,这似乎不合适,而且很少有合适的情况出现。如果不清楚,我深表歉意。
-
@Martin Perry:没有理由让它成为一个全局变量。依赖注入是前进的方向。
-
嗯,这是一种游戏的开始。一款可以处理大量数据的游戏。不是常见的主流射击游戏……;)我需要大量数据才能一直访问,从数据库读取只有在保存和加载期间才可行。或多或少...
标签: c# list class object dictionary