从其自己的类中声明一个静态对象

时间:2018-04-04 12:34:25

标签: c# oop static

您好我有一些代码,我使用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类中,还是有更好的方法来处理它吗?

2 个答案:

答案 0 :(得分:1)

这取决于您尝试构建的架构。

让一切静止

如果它很简单,只需将xModify设为静态,您就不会需要实例。

使用单件模式

如果确实需要Manager实例,那么使用Singleton模式可以更好地使用代码

private static Manager _manager;

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

答案 1 :(得分: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();
    }
}