"public static"和"static public"有什么区别?

13
sealed class PI
{
  public static float number;
  static PI()
  { number = 3.141592653F; }
  static public float val()
  { return number; }
}
  1. public static和static public有什么区别?它们可以以任何顺序使用吗?

  2. 我该如何使用static public float val()

    它会在类初始化时立即执行吗?


第二个问题可能应该在另一个问题中提出。 - McKay
1
请参阅旧线程在C#中修饰符的顺序是否有惯例? - Jeppe Stig Nielsen
6个回答

26

没有区别。您可以在任何顺序中指定它们。
但是,我发现大多数开发人员倾向于使用:

public static

并且不是static public。


9
好的,按照惯例,首先使用可访问性修饰符。始终如此。 - Robert Harvey

9

关于修饰符的顺序

修饰符可以以任何顺序使用,只是在使用时需要注意风格。我通常先使用可见性修饰符,而且大多数代码也是如此。

关于第二个问题:

static public float val()

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

8

嗯,这就像是一个人的名字 =) 把Tom叫做Mike或者把Mike叫做Tom,没有任何区别。


10
除非你是名字叫做Confu Sing的人,否则可能没有例外。 - user166390

7

没有区别。它们相对于彼此的顺序并不重要。


5
回答你的第二个问题,它应该被写成:
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 以外,它是一个值类型,因此不能为 null。 - Jesper Larsen-Ledet

4

关于第二个问题:该方法无需类的实例即可使用,可以这样调用:

PI.val();

由于该类仅具有静态成员,因此该类应该是一个静态类,这样它就永远不会被初始化。

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