2012-05-23 71 views
8

我看我可以这样写:如何使用受保护的/私有静态变量?

protected static 
在我的C#类

(在我的情况下,aspx.cs)。以及:

private static 

这是什么意思?静态是无处不在的。为什么保护/私人?

+0

http://stackoverflow.com/questions/135020/advantages-to-using-private-static-methods – CraigTP

+0

我知道!对不起,我来自Java。那里的东西有点不同... – markzzz

回答

18

静态的定义并不是“无处不在”。它是一个在AppDomain范围内声明的类型共享的变量。

Access Modifiers不改变这个定义,但明显影响访问范围。

您在将static修饰符与访问修饰符相混淆。静态变量仍然需要定义可访问性。在你的例子中,私有静态变量只能在它定义的类型中访问,protected可以在类型和任何派生类型中访问。

请注意,IIS(托管ASP.NET应用程序)会回收工作进程,这将会刷新当时处于活动状态的任何静态变量值。

0

static并不意味着它无处不在。您仍然需要protected/private来定义可视性。

1

的用途之一是,你可以创建私有静态字段,并使用公共静态方法公开/属性(适用像单身一些自定义的业务逻辑等)

-1

使用受保护的,如果你只希望变量进行访问通过某些类,例如使用多态和继承。公开使其始终在范围内可见,而私人显而易见。

2

如果你声明一个变量为Private,那么你无法在当前类之外访问它,如果声明为Protected,那么只有派生类可以访问该变量。在你的例子中,基本含义是private和protected没有改变,因此不要紧,你怎么把它声明静态或简单的一个...

class Test 
{ 
    protected static int var1; 
    private static int var2; 
} 
class MainProgram : Test 
{ 
    private static int test; 
    static void Main(string[] args) 
    { 
     Test.var1 = 2; 
     Test.var2 = 5; //ERROR :: We are not able to access var2 because it is private     
    } 
} 

在上面的代码中,你可以看到,如果我们想要的静态变量只在当前类是可访问的,那么你需要把它作为一个私人。

+3

来源:MSDN(各种页面)。始终保持礼貌来信任你的来源。 – tomfanning

0

private
类型或成员只能由同一个类或结构中的代码访问。
保护
类型或成员只能由相同的类或结构,或派生类中的代码访问。 Static Modifier
静态方法在没有实例引用的情况下被调用。

+0

静态方法?我在谈论变量,而不是方法...... – markzzz

+0

@markzzz无关紧要,你如何访问他们是一样的 - 一个只是一个方法调用,另一个是字段/属性访问。 –