I see I can write :
protected static
in my C# class (in my case, an aspx.cs). As well as :
private static
static
does not mean it is accessible everywhere. You still need protected
/private
to define visibility.
One use is that you can create private static fields, and expose using public static methods/properties (to apply some custom business logic like singleton, etc)
The definition of static isn't "available everywhere". It is a variable shared across the type it is declared within in the scope of an AppDomain.
Access Modifiers do not alter this definition, but obviously affect the scope of access.
You are confusing the static modifier with access modifiers. A static variable still needs accessibility defined. In your example, private static variables are only accessible within the type it is defined in, protected would be accessible within the type and any derived types.
Just a note, be aware that IIS (hosting ASP.NET applications) recycles worker processes, which will flush any static variable values that are alive at the time.
private
The type or member can only be accessed by code in the same class or struct.
protected
The type or member can only be accessed by code in the same class or struct, or in a derived class.
Static Modifier
Static methods are called without an instance reference.
Static is a modifier.. And protected and private are access modifier. Access modifier specify the scope of the variable. Static modifier is used when we want field or method to be singleton thus we don't have to access them by creating the object , rather they can be called through class name directly
If you declare a variable as a Private then you are not able to access it outside the current class and if declare as a Protected then only the derived class is able to access that variable..In your example the basic meaning of private and Protected is not changing so it does not matter how you declare it Static or simple one...
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
}
}
In above code you can see if we want the static variable is accessible only in the current class then you need to make it as a Private.