在其自身类中声明静态对象

3

你好,我有一些代码,其中我使用 Manager 的静态对象来调用 Manager 的方法:

public class Manager
{
    public static Manager sManager = new Manager();
    public int x;

    public Manager()
    {  
    }


    public void Modify()
    {
        x ++;
    }
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Manager.sManager.x);
        Manager.sManager.Modify();
        Console.WriteLine(Manager.sManager.x);
        Console.ReadLine();
    }
}

如果必须使 Manager 类拥有 Modify 方法,那么通过外部访问该方法的方式是否正确?

在这种情况下,使用事件来构建并使 Manager 监听更新是否更好?

即使我希望 Modify 方法保留在 Manager 类内部,是否还有更好的处理方式?


1
我认为你只需要在需要的地方外部实例化 Manager 类,或者将整个类和所有方法/属性设为静态(如果可行的话,我不确定应用程序)。 - ScottishTapWater
我不明白你试图实现什么。我同意@JamesHughes的观点,只需实例化“Manager”就足够了。 - Dan Wilson
1
我可能对此有所错误,但我看到很多Java开发人员这样做。我不明白为什么这会有益处。如果你想这样做,那么你最好将类定义为静态的。 - Frontear
1
看起来像是一个未完成的单例模式 - Mong Zhu
是的,那正是它的意思。 - azuric
1
对于一个真正的单例,你需要有一个private构造函数。否则,就允许创建多个实例。所以这更像是一个多例 ;) - Mong Zhu
2个回答

1
这取决于你想要构建的架构。
使所有内容静态化
如果只是这样简单,只需将x和Modify设置为静态即可,不需要实例。
使用单例模式
如果确实需要一个Manager实例,你的代码最好使用Singleton模式。
private static Manager _manager;

public static Manager Manager
{
   get 
   {
      if (_manager == null)
      {
         _manager = new Manager();
      }
      return instance;
   }
}

1
没有必要在Manager类中创建一个相同类型的静态字段。您只需要创建一个对象,然后调用所需的方法即可。
更好的方法是将字段设置为私有,并仅暴露它以供读取,以便不能直接修改它,我们只能通过调用modify()方法来修改它:
public class Manager
{

  private int x;

  public int X
  {
    get
    {
       return x;
    }
  }

  public Manager()
  {  
  }


  public void Modify()
  {
      x++;
  }
} 

在你的Program类中使用它:

然后使用它:

class Program
{
    static void Main(string[] args)
    {
        Manager objManager = new  Manager();
        Console.WriteLine(objManager.X);

        objManager.Modify();

        Console.WriteLine(objManager.X);
        Console.ReadLine();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接