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

时间:2014-06-03 22:43:22

标签: c# object methods

好的。我会尝试以有组织的方式提出我的问题。

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

我尝试使用struct作为状态"状态"的蓝图。宾语。 我在结构中有几个字段来分配"属性"对象。

State Louisiana = new State(); Louisiana.name = "Louisiana";

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

我希望能够在同一个类的不同方法中执行Louisiana.SetIDInfo("LA", "Louisiana", 32);之类的操作。或者,我希望能够在方法中设置一个等于对象属性之一的变量:string MyString = Louisiana.name;这是不可能的,还是我误解了某些内容?

我用作构建结构的参考的文章是here

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

我链接的代码工作正常。问题是我用粗体概述的。

我想也许是"静态"的一些用途。可能是不必要的或错误的。说实话,我不确定。这就是我寻求帮助的原因。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

首先,关于struct的一句话。通常,结构应该只包含数据,并且是不可变的。您不必以这种方式实现它们,但通常的做法是在您执行实例方法时使用class

经验法则:使用class而不是struct。只有当您知道为什么时才使用struct

然而,这并不是什么打破了你的样本。在您生成功能的最底层,您有:

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

你会想到什么,它会创建一个状态集合。但是,该行声明了一个 new 变量,这意味着它的作用域是该函数。该函数之外的代码不知道它的存在。事实上,在函数的最后一行执行之后,局部变量被称为超出范围"并将被垃圾收集。如果你写了:

static State[] USA;

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

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

您还丢失了所有本地变量(例如Louisiana),因此除非您将他们声明为类级变量,否则您无法直接访问它们。或者,您可以在数组中搜索名为" Louisiana"并尝试使用它:

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

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

你也问过静电。在标准的控制台应用程序中,它被大量使用,但是一旦你离开这个领域,你通常就不会使用它了。 static允许您在没有实例的情况下使用类(它使用全局"静态"实例)。良好的OOP通常会阻止这种做法,但你不应该担心它。