Что я могу сделать с защищенной/частной статической переменной?

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

protected static

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

private static

Что это значит? Статик доступен везде. Почему защита/конфиденциальность?

Ответ 1

Определение статики не "доступно везде". Это переменная, разделенная по типу, объявленному внутри области AppDomain.

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

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

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

Ответ 2

Статический - это модификатор. И защищенный, и приватный - это модификатор доступа. Модификатор доступа определяет область действия переменной. Статический модификатор используется, когда мы хотим, чтобы поле или метод были одноэлементными, поэтому нам не нужно обращаться к ним при создании объекта, скорее их можно вызывать через имя класса напрямую

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

Ответ 6

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

Ответ 7

Используйте protected, если вы хотите, чтобы переменная была доступна через определенные классы, например, при использовании полиморфизма и наследования. Публикация делает ее всегда видимой в пределах области действия, а частное - довольно очевидно.