Public static vs static public - есть ли разница?

sealed class PI
{
  public static float number;
  static PI()
  { number = 3.141592653F; }
  static public float val()
  { return number; }
}
  • Какая разница между публичной статической и статической публикацией? Могут ли они использоваться в любом порядке?

  • Как использовать static public float val()?

    Выполняется ли его, как только инициализируется класс?

Ответ 1

Ну, это точно так же, как имя Person =) Вызов Тома Майка или Майка Тома, никакой разницы.

Ответ 2

Нет никакой разницы. Вы можете указать их в любом порядке. Тем не менее, я считаю, что большинство разработчиков склонны использовать публичную статическую, а не статическую публикацию.

Ответ 3

О порядке заказа модификаторов

Они могут использоваться в любом порядке. Это просто стилистический выбор, который вы используете. Я всегда использую видимость сначала, и большинство других кодов тоже делает.

О втором вопросе:

static public float val()

Это просто статическая функция. Вы вызываете его с помощью PI.val(). Вам просто не нужен экземпляр класса для его вызова, но вызовите его непосредственно в классе. Статическая функция не получает ссылку this, не может быть виртуальной, она просто как функция на языке без OOP, за исключением того, что она использует класс как пространство имен.

Ответ 4

Нет никакой разницы. Их порядок не важен по отношению друг к другу.

Ответ 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, вам нужно будет только сделать вычисления один раз.

Ответ 6

Что касается второго вопроса: метод доступен без экземпляра класса, его можно было бы назвать так:

PI.val();

Поскольку класс имеет только статические члены, класс, вероятно, должен быть статическим классом, а затем он никогда не сможет инициализироваться.