2010-11-10 87 views
11
sealed class PI 
{ 
    public static float number; 
    static PI() 
    { number = 3.141592653F; } 
    static public float val() 
    { return number; } 
} 
  1. public static和static public有什么区别?它们可以以任何顺序使用吗?如何使用static public float val()公共静态与静态公共 - 是否有区别?

    是否得到尽快类初始化执行?

+0

第二个问题或许应该在一个单独的问题来问。 – McKay 2010-11-10 18:26:17

+1

另请参阅旧的线程[是否有一个约定在C#中修饰符的顺序?](http://stackoverflow.com/questions/191929/)。 – 2013-08-16 09:18:54

回答

9

好吧,它就像一个人的名字=) 打电话给汤姆迈克或迈克汤姆,没有什么区别。

+7

除非你是Sing Confu并且他们叫你Confu Sing。 – 2010-11-10 18:27:34

+1

请不要调情谢谢 – 2010-11-10 18:34:00

+0

对不起........... – Singleton 2010-11-10 18:37:53

9

关于改性

它们可以以任意顺序使用的顺序。这只是你使用的一种文体选择。我总是首先使用可视性,而其他大多数代码也是。

关于第二个问题:

static public float val() 

这只是一个静态的功能。你用PI.val()来称呼它。你不需要一个类的实例来调用它,而是直接在类上调用它。静态函数没有收到this参考,不能是虚拟的,它就像在非OOP语言的功能,只不过它使用类作为名称空间。

7

没有区别。他们的顺序没有相对于彼此

18

重要的有没有区别。您可以自由指定它们的顺序。但是,我发现大多数开发人员倾向于使用公共静态而非静态公共。

+7

是的。首先按照惯例辅助修饰符。总是。 – 2010-11-10 18:22:38

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

之所以写这样一类是缓存的价值,节省时间随后调用该方法。如果获得pi的方法需要大量时间来执行计算,那么您只需要进行一次计算。

+0

除了pi不能为null,因为它是一个值类型 – 2010-11-11 13:15:50

+0

@jesperll:fixed。 – 2010-11-11 16:17:24