实例初始化,放在哪里?

时间:2014-02-24 14:26:52

标签: c# instance

基本上我的一个实例(theNode)需要接受变量,因为它在take参数中,但是,我需要全局声明实例(不确定这是否是正确的措辞)以及其他实例,因此数据是总是存储在程序执行的整个生命周期中。

我希望将它放在旁边的示例:

Tree theTree = new Tree();
UsersInput theInput = new UsersInput();

放置位置:

while (!attempt)
{
    int temp = theInput.TheUsersInput();
    Node theNode = new Node(temp);
    theTree.Add(temp);
    theNode.PrintNodes();
    attempt = theInput.AddMoreNumbers();
}

任何人都有任何建议如何在不使用糟糕的编程习惯的情况下解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以在其中一个类中创建static个字段。像这样:

class Program
{
    public static Node theNode;

    void Main()
    {
        ...
        while (!attempt)
        {
            int temp = theInput.TheUsersInput();
            theNode = new Node(temp);
            theTree.Add(temp);
            theNode.PrintNodes();
            attempt = theInput.AddMoreNumbers();
        }
        // you can start using theNode globally from this point
    }
}

答案 1 :(得分:0)

某个方法(或访问者等)不是“本地”的变量,而是直接驻留在class(或struct)声明中的变量,称为字段在C#。

字段可以是static(对于类只存在一个字段)或非静态(类的每个实例,即该类型的每个对象都有拥有该领域的“版本”。

请注意,在C#中,必须在classstruct内声明变量。

示例:

namespace N
{
  public static Tree TheTree = new Tree();  // ILLEGAL (not inside a class)!
}

namespace N
{
  class YourClass
  {
    public static Tree TheOneTree = new Tree();  // OK, static

    public Tree TheOtherTree = new Tree();  // OK, instance

    void Method()
    {
      var theUltimateTree = new Tree();  // OK, local variable
      ...
    }
  }
}

但是,如果您需要使用属性而不是字段,则应考虑如上所述public。字段通常应为private(类成员的默认可访问性)。