2012-05-23 2 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 с модификаторами доступа. Статическая переменная по-прежнему требует определенной доступности. В вашем примере частные статические переменные доступны только в том типе, в котором он определен, защищенные будут доступны в типе и любых производных типах.

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

0

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

1

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

-1

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

2

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

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

+0

Статические методы? Я говорю о переменных, а не о методах ... – markzzz

+0

@markzzz Не имеет значения, как вы обращаетесь к ним одинаково - один - это вызов метода, другой - доступ к полю/собственности. –

Смежные вопросы