gpt4 book ai didi

c# - 保持我的列表/词典在全局范围内可访问

转载 作者:行者123 更新时间:2023-11-30 16:17:54 28 4
gpt4 key购买 nike

好吧...我试图理解整个面向对象的编程,但我总是陷入死胡同。 ;)

我正在尝试存储或更确切地说将存储大量数据,并按我应该的方式使用类。我想通过使用具有多个属性的类来存储行星数据,然后将它们保存到列表中。

我的问题是我不知道如何让这个列表全局可访问,它只能在创建它的实例中访问。

下面是我的测试环境中的一些示例代码。

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()));
}

我已经花了几个小时在这里和其他地方查找我的问题,但我不知道如何访问我放入列表中的信息,而不是在那个单一实例中。我的实际应用程序将包含数以万计的轨道体和许多其他数据,这些数据必须可以通过多种形式甚至其他类访问。​​

一些帮助将不胜感激,什么是最好的解决方案?完全不同吗?!?

最佳答案

你不需要静态成员或单例(这两者导致的问题多于它们解决的问题),你需要 Dependency Injection .

在您的表单之外创建列表,将其传递给表单构造函数。在任何需要使用列表的地方,传递表单中的实例。

这样只有一个列表,任何需要列表的地方都会被传递一个列表(恰好是同一个列表)。

如果您及时意识到您实际上需要对两个不同的系统建模,您只需创建两个不同的列表,并将它们传递给两个不同的表单,一切都会继续工作,您不需要返回通过您的代码删除对静态成员。

老实说,这是完全可行的,而不会走向黑暗面并使静态/全局变量的邪恶永存。

注意 Why static variables are considered evil

关于c# - 保持我的列表/词典在全局范围内可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16716544/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com