gpt4 book ai didi

c# - 在整个类中使用创建的对象

转载 作者:行者123 更新时间:2023-11-30 22:05:52 26 4
gpt4 key购买 nike

好的。我将尝试以有条理的方式提出我的问题。

我正在做的是一个显示天气图的应用程序。没什么大不了的,只是为了更好地理解编程而创建的东西。我有一个工作原型(prototype),我对此很兴奋,所以我想知道我是否可以让它更有条理和专业。

我正在尝试使用 struct 作为“状态”对象的蓝图。我在结构中有几个字段可以为对象分配“属性”。

即.

路易斯安那州 = new State();
Louisiana.name = "路易斯安那州";

现在,这太棒了。它做我想要的。但是,我在理解如何正确使用它时遇到了问题。 我有一个名为 StateInitialization() 的方法,它创建 50 个结构实例,每个状态一个。但是,在该方法之外,我无法使用甚至访问创建的 State 实例或属性。

我希望能够在同一类的不同方法中执行类似 Louisiana.SetIDInfo("LA", "Louisiana", 32); 的操作。或者,我希望能够在方法中将变量设置为对象的一个​​属性:string MyString = Louisiana.name; 这是不可能的,还是我误解了什么严重吗?

我用作构建结构引用的文章是 here .

抽象结构代码的链接是here .StateInitialization() 方法的链接是 here .

我链接的代码可以正常工作。问题是我用粗体勾勒出来的。

我认为“静态”的某些用法可能是不必要的或错误的。老实说,我不确定。这就是我寻求帮助的原因。非常感谢任何帮助。

最佳答案

首先,谈谈struct。一般来说,结构应该只包含数据,并且是不可变的。您不必以这种方式实现它们,但一般做法是在您要对它们执行实例方法时使用 class

经验法则:使用class 而不是struct。仅当您知道为什么要这样做时才使用struct

但是,这并不是破坏您的样本的原因。在生成函数的最底部,您有:

State[] USA = new State[] { .... };

它会按照您的想法进行操作,它会创建一个状态集合。但是,该行声明了一个 变量,这意味着它的作用域是函数。该函数之外的代码不知道它的存在。事实上,在函数的最后一行执行后,局部变量被称为“超出范围”,将被垃圾收集。相反,如果您写道:

static State[] USA;

static void GenerateStates()
{
...
USA = new State[] { ..... };
}

您类中的所有其他方法都可以访问 USA 数组。请注意,这有点危险,因为您可以在调用 GenerateStates 之前尝试使用它,但我离题了。

您还丢失了所有局部变量(如 Louisiana),因此您将无法直接访问它们,除非您也将它们 声明为类级变量。或者,您可以在数组中搜索名为“Louisiana”的州并尝试使用它:

USA.First(s => s.name == "Louisiana").SomeMethod();

同样,还有很多其他方法可以实现这一点(想到的是字典而不是数组)。如果这种状态不存在,这个方法会抛出异常,只是为了警告你。

您还询问了静电。在标准的控制台应用程序中它被大量使用,但是一旦你离开那个领域,你通常不会使用它。 static 允许您在没有实例的情况下使用类(它使用全局“静态”实例)。良好的 OOP 通常不鼓励这种做法,但您暂时不必担心。

关于c# - 在整个类中使用创建的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24026186/

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