public static vs static public - есть ли разница? - PullRequest
11 голосов
/ 10 ноября 2010
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()?

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

Ответы [ 6 ]

19 голосов
/ 10 ноября 2010

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

10 голосов
/ 10 ноября 2010

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

9 голосов
/ 10 ноября 2010

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

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

По второму вопросу:

static public float val()

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

7 голосов
/ 10 ноября 2010

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

5 голосов
/ 10 ноября 2010

Чтобы ответить на ваш второй вопрос, он, вероятно, должен быть записан как

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();

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

4 голосов
/ 10 ноября 2010

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

PI.val();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...