Вопрос по c#, .net – Что я могу сделать с защищенной / приватной статической переменной?

11

Я вижу, я могу написать:

protected static

в моем классе C # (в моем случае, aspx.cs). Так же как :

private static

Что это значит? Статика доступна везде. Почему защищенный / частный?

stackoverflow.com/questions/135020/… CraigTP
Я знаю! Извините, я с Явы. Там все немного по-другому ... markzzz

Ваш Ответ

6   ответов
22

общая для типа, в котором она объявлена в области AppDomain.

Модификаторы доступа не меняйте это определение, но, очевидно, влияйте на объем доступа.

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

Просто обратите внимание, что IIS (размещающий приложения ASP.NET) перезапускает рабочие процессы, которые сбрасывают любые значения статических переменных, которые существуют в данный момент.

1

что вы можете создавать частные статические поля и открывать их, используя общедоступные статические методы / свойства (для применения некоторой настраиваемой бизнес-логики, такой как singleton и т. Д.)

0

static не означает, что это доступно везде. Тебе еще нужноprotected/private определить видимость.

2

то вы не сможете получить к ней доступ за пределами текущего класса, а если объявите ее как защищенную, то только производный класс сможет получить доступ к этой переменной. В вашем примере основное значение 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.

Error: User Rate Limit Exceeded
0

private
     или структуре.
protected
    Доступ к типу или члену возможен только с помощью кода в том же классе или структуре или в производном классе. Static Modifier
 Статические методы вызываются без ссылки на экземпляр.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded markzzz
0

если вы хотите, чтобы переменная была доступна только через определенные классы, например, при использовании полиморфизма и наследования. Public делает его всегда видимым в пределах видимости, а private довольно очевиден.

Похожие вопросы