如何将C#对象保持在范围内,以便在整个程序中访问和更改值?

如何将C#对象保持在范围内,以便在整个程序中访问和更改值?,c#,class,global-variables,C#,Class,Global Variables,你好 这是一个一般性问题 我对C#相当陌生,所以我一直在为初学者阅读/完成一些关于C#的教程和书籍。我试图创建一个基于股票市场交易的游戏。其目的是从4个不同的国家创建80家公司,每个国家将拥有相同的10种不同商品。在游戏开始时,这些公司将有10万只股票可供出售。我试图通过使用Company类来跟踪所有这些,该类跟踪名称、国家、商品、起始价格、最后一轮价格、可用股票和其他一些参数。我遇到的问题似乎与“范围”有关,因为我既无法访问创建的对象,也无法对其进行更改。我的教程似乎没有详细讨论这个问题,只是

你好

这是一个一般性问题

我对C#相当陌生,所以我一直在为初学者阅读/完成一些关于C#的教程和书籍。我试图创建一个基于股票市场交易的游戏。其目的是从4个不同的国家创建80家公司,每个国家将拥有相同的10种不同商品。在游戏开始时,这些公司将有10万只股票可供出售。我试图通过使用Company类来跟踪所有这些,该类跟踪名称、国家、商品、起始价格、最后一轮价格、可用股票和其他一些参数。我遇到的问题似乎与“范围”有关,因为我既无法访问创建的对象,也无法对其进行更改。我的教程似乎没有详细讨论这个问题,只是说C#不支持以前的语言那样的全局范围。我不想在“Main”块中声明变量——我想这就是为什么要创建一个新类(使用类向导)

我正在寻找一个建议,让我开始-我不是在寻找解决方案(还没有,lol),我应该看看哪里


谢谢您的时间。

正如上面的评论中所提到的,您的问题到底是什么还不是100%清楚,但我将尝试引导您朝着一个可能有帮助的方向前进。我的理解是,您希望有一种“中心”对象来存储游戏的状态,并且可以在整个代码中从不同的类和范围访问它。我建议你去看看

静态类是只有一个全局实例的类。这意味着您可以从程序中的任何地方访问存储在该静态类范围内的任何信息。一个简单类的示例可能包含您需要的信息,如下所示-

public static class GameState
{
    public static List<Company> Companies = new List<Companies>();
    public static List<Country> Countries = new List<Country>();
    public static List<Commodity> Commodities= new List<Commodity>();
}
公共静态类游戏状态
{
公开静态上市公司=新上市公司();
公共静态列表国家=新列表();
公共静态列表商品=新列表();
}
使用类似的方法,您可以在代码中的任何位置访问这些静态成员(
公司
国家
商品
),例如,只需引用静态类即可

var numOfCountries=GameState.Countries.Count

在我结束之前,我只是一个评论——我并不主张在任何实际应用中使用这种方法。这不是一个很好的实践,它有很多缺点——例如,我上面建议的类,在整个程序中只能有一个游戏状态——想象一下,如果你想将程序变成一个服务器,并行管理许多玩家的游戏状态,会发生什么情况。然而,考虑到你提到你是C#的新手,我认为这是最简单的解决方案,可以帮助你走上正轨


感谢您抽出时间分享您的问题。但是你的问题中缺少了一些东西。你的目标和困难是什么?到目前为止你做了什么?请尝试更好地解释您的问题、您的开发环境和数据结构,并共享更多代码(无屏幕截图)、一些示例、屏幕图像或草图以及用户故事或场景图。为了帮助您改进您的请求,请阅读右上角的和我避免问的问题。您可以添加一些代码吗?您使用的是什么UI技术?Windows窗体、WPF、ASP、控制台……?“我不想在“主”块中声明变量-为什么不?如果它们属于那里,那么这是一个申报它们的好地方。“我想这就是为什么要创建一个新类”——它本身会被一个变量引用,不是吗?如果该类本身包含股票交易系统的引擎,那么您可以在其中声明变量吗?现在还不清楚你到底遇到了什么问题。使用类向导-好奇:那会是什么?谢谢你,尼姆罗德。我将从这个开始。正如我提到的,我只是在寻找一个通用的“我应该从哪里开始”,这是完美的。没问题@TMaxwell86,很高兴这有帮助。如果您觉得这符合您的需要,请随意单击左侧的复选标记。这既是表示感谢的“StackOverflow”方式,更重要的是,节省了其他人的时间,因为他们可以看到,没有必要再次回答这个问题(:快乐编码!