代码之家  ›  专栏  ›  技术社区  ›  Alex Gordon

公共静态和静态公共-有区别吗?

  •  11
  • Alex Gordon  · 技术社区  · 14 年前
    sealed class PI
    {
      public static float number;
      static PI()
      { number = 3.141592653F; }
      static public float val()
      { return number; }
    }
    
    1. 公共静态和静态公共有什么区别?它们可以按任何顺序使用吗?

    2. 我怎么用 static public float val() ?

      初始化类后是否立即执行它?

    6 回复  |  直到 9 年前
        1
  •  10
  •   Peter Mortensen icecrime    14 年前

    嗯,这就像是一个人的名字=) 打电话给汤姆·迈克或迈克·汤姆,没什么区别。

        2
  •  19
  •   Jesper Larsen-Ledet    14 年前

    没有区别。您可以按任意顺序指定它们。然而,我发现大多数开发人员倾向于使用公共静态而不是静态公共。

        3
  •  9
  •   CodesInChaos    13 年前

    关于修饰符的顺序

    它们可以按任何顺序使用。这只是一个风格的选择,你使用的。我总是首先使用可见性,而大多数其他代码也是这样。

    关于第二个问题:

    static public float val()
    

    这只是一个静态函数。你叫它和 PI.val() . 您不需要类的实例来调用它,而是直接在类上调用它。静态函数不接收 this 引用不能是虚拟的,它就像非OOP语言中的函数,只是它使用类作为命名空间。

        4
  •  7
  •   JaredPar    14 年前

    没有区别。他们之间的秩序并不重要

        5
  •  5
  •   Robert Harvey    14 年前

    要回答第二个问题,它可能应该写为

    public static class Pi
    {
        private static float pi = 0;
    
        public static float GetValue()
        {
            if (pi == 0)
                pi = 3.141592653F;   // Expensive pi calculation goes here.
    
            return pi;
        }
    }
    

    把它叫做:

    float myPi = Pi.GetValue();
    

    编写此类的原因是为了缓存该值,从而在随后调用该方法时节省时间。如果获取pi的方法需要很多时间来执行计算,那么您只需要执行一次计算。

        6
  •  4
  •   McKay    14 年前

    关于第二个问题:该方法在没有类实例的情况下可用,可以称为thusly:

    PI.val();
    

    因为类只有静态成员,所以该类可能是静态类,然后它将永远无法初始化。