2010-11-10 5 views
11
sealed class PI 
{ 
    public static float number; 
    static PI() 
    { number = 3.141592653F; } 
    static public float val() 
    { return number; } 
} 
  1. В чем разница между публичной статической и статической публикацией? Можно ли их использовать в любом порядке?public static vs static public - есть ли разница?

  2. Как бы использовать static public float val()?

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

+0

Второй вопрос, вероятно, следует задать по отдельному вопросу. – McKay

+1

См. Также предыдущую версию [Есть ли соглашение о порядке модификаторов в C#?] (Http://stackoverflow.com/questions/191929/). –

ответ

9

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

+7

За исключением, может быть, если вы поете Confu, и они называют вас Confu Sing. – 2010-11-10 18:27:34

+1

прошу не флиртовать спасибо u –

+0

извините ........... – Singleton

9

О упорядочении модификаторов

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

О второй вопрос:

static public float val() 

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

7

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

18

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

+7

Да. Модификатор доступности, по соглашению. Всегда. –

4

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

PI.val(); 

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

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

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

+0

За исключением pi не может быть null, так как это тип значения –

+0

@jesperll: исправлено. –

Смежные вопросы