Я вижу, что могу написать:
protected static
в моем классе С# (в моем случае aspx.cs). Также как:
private static
Что это значит? Статик доступен везде. Почему защита/конфиденциальность?
Я вижу, что могу написать:
protected static
в моем классе С# (в моем случае aspx.cs). Также как:
private static
Что это значит? Статик доступен везде. Почему защита/конфиденциальность?
Определение статики не "доступно везде". Это переменная, разделенная по типу, объявленному внутри области AppDomain.
Модификаторы доступа не изменяют это определение, но явно влияют на объем доступа.
Вы вводите в заблуждение модификатор static с модификаторами доступа. Статическая переменная по-прежнему требует определенной доступности. В вашем примере частные статические переменные доступны только в том типе, в котором он определен, защищенные будут доступны в типе и любых производных типах.
Помните, что IIS (хостинг приложений ASP.NET) перерабатывает рабочие процессы, которые будут очищать любые значения статической переменной, которые в данный момент являются живыми.Статический - это модификатор. И защищенный, и приватный - это модификатор доступа. Модификатор доступа определяет область действия переменной. Статический модификатор используется, когда мы хотим, чтобы поле или метод были одноэлементными, поэтому нам не нужно обращаться к ним при создании объекта, скорее их можно вызывать через имя класса напрямую
Если вы объявляете переменную как приватную, то вы не можете получить к ней доступ за пределами текущего класса, а если объявить как защищенный, то только производный класс сможет получить доступ к этой переменной. В вашем примере основное значение частного и 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
}
}
В приведенном выше коде вы можете увидеть, хотим ли мы, чтобы статическая переменная была доступна только в текущем классе, тогда вам нужно сделать ее как приватную.
Одно использование - создавать частные статические поля и открывать с использованием общедоступных статических методов/свойств (для применения некоторой пользовательской бизнес-логики, такой как singleton и т.д.)
частный
Доступ к типу или члену может получить только код в том же классе или структуре.
защищенный
Доступ к типу или члену может получить только код в том же классе или структуре или в производном классе.
Статический модификатор
Статические методы вызывают без ссылки на экземпляр.
static
не означает, что он доступен везде. Для определения видимости вам все еще нужно protected
/private
.
Используйте protected, если вы хотите, чтобы переменная была доступна через определенные классы, например, при использовании полиморфизма и наследования. Публикация делает ее всегда видимой в пределах области действия, а частное - довольно очевидно.