17

我知道我可以写:

protected static

在我的 C# 类中(在我的例子中,一个 aspx.cs)。也 :

private static

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

4

7 回答 7

30

静态的定义不是“随处可用”。它是在 AppDomain 范围内声明的类型之间共享的变量。

访问修饰符不会改变这个定义,但显然会影响访问范围。

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

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

于 2012-05-23T08:35:03.967 回答
5

如果您将变量声明为 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                 
    }
}

在上面的代码中,您可以看到我们是否希望静态变量只能在当前类中访问,那么您需要将其设为 Private。

于 2012-05-23T08:39:25.493 回答
4

private
类型或成员只能被同一类或结构中的代码访问。
protected
类型或成员只能由同一类或结构中的代码或派生类中的代码访问。 静态修饰符
静态方法在没有实例引用的情况下被调用。

于 2012-05-23T08:39:41.977 回答
2

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

于 2012-05-23T08:35:29.920 回答
1

如果您只想通过某些类访问变量,例如在使用多态性和继承时,请使用 protected。公共使其始终在范围内可见,而私有则非常明显。

于 2012-05-23T08:38:29.713 回答
0

一种用途是您可以创建私有静态字段,并使用公共静态方法/属性公开(应用一些自定义业务逻辑,如单例等)

于 2012-05-23T08:36:05.127 回答
0

静态是一个修饰符。保护和私有是访问修饰符。访问修饰符指定变量的范围。当我们希望字段或方法为单例时使用静态修饰符,因此我们不必通过创建对象来访问它们,而是可以直接通过类名调用它们

于 2019-09-09T07:55:36.400 回答