C# – Static Members
The main features of a static class are:
* They only contain static members.
* They cannot be instantiated.
* They are sealed.
* They cannot contain Instance Constructors .
* We can hide a base class static method in a derived class by using the keyword "new".
A C# class can contain both static and non-static members.
When we declare a member with the help of the keyword "static", it becomes a static member.A static member belongs to the class rather than to the objects of the class.
Hence static members are also known as class members and non-static members
are known as 'instance members'.
are known as 'instance members'.
In C#, data fields, member functions, properties and events can be declared
either as static or non-static. There is no concept of static indexers, even though static properties are there.
a) Static Fields
-------------------
Static fields can be declared by using the keyword " static ".
When we declare a static field inside a class, it can be initialized with a value as shown in the following example.
All un-initialized static fields automatically get initialized to their default values(0) when the class is loaded first time.
Example :
using System;
class MyClass
{
public static int xx= 20;
public static int yy;
public static int zz = 40;
// values first come to constructor
public MyClass(int i)
{
xx = i; // assign xx = 50
}
}
class MyClient
{
public static void Main()
{
Console.WriteLine("{0},{1},{2}",MyClass.xx,MyClass.yy,MyClass.zz);
MyClass mc = new MyClass(50);
Console.WriteLine("{0},{1},{2}",MyClass.xx,MyClass.yy,MyClass.zz);
}
}
Output :
20,0,40
50,0,40
b) static constructor
--------------------------
The C# provides a special type of constructor known as static constructor to initialize the static data members when the class is loaded at first.
The name of a static constructor must be the name of the class and even they don't have any return type. The keyword "static" is used with the constructor.
The static constructor can't take any arguments. That means there is only one form of static constructor, without any arguments.
In other way it is not possible to overload a static constructor.
We can't use any access modifiers along with a static constructor.
Example :
// C# static constructor
using System;
class MyClass
{
public static int xx;
public static int yy = 500;
static MyClass ()
{
xx = 100;
yy = 200; // assign yy = 200 not 500
}
}
class MyClient
{
public static void Main()
{
Console.WriteLine("{0},{1}",MyClass.xx,MyClass.yy);
}
}
Output:
100,200
Note that static constructor is called when the class is loaded at the first time. They are called before an instance of the class is created, before a static member is called and before the static constructor of the derived class is called.
c) Static Member Functions
-----------------------------------
Inside a C# class, member functions can also be declared as static using "static" keyword.
But a static member function can access only other static members.
They can access non-static members only through an instance of the class.
We can invoke a static member only through the name of the class.
In C#, static members can't invoked through an object of the class as like in C++ or JAVA.
They can access non-static members only through an instance of the class.
We can invoke a static member only through the name of the class.
In C#, static members can't invoked through an object of the class as like in C++ or JAVA.
Example :
using System;
class MyClass
{
private static int x = 20;
private static int y = 40;
public static void Method()
{
Console.WriteLine("{0},{1}",x,y);
}
}
class MyClient
{
public static void Main()
{
MyClass.Method();
}
}
d) Static Properties
-------------------------
The properties can be declared as static in C#. The static properties are accessing using the class name.
Example :
using System;
class MyClass
{
public static int X
{
get
{
Console.Write("GET");
return 10;
}
set
{
Console.Write("SET");
}
}
}
class MyClient
{
public static void Main()
{
MyClass.X = 20; // calls setter displays SET
int val = MyClass.X;// calls getter displays GET
}
}
Output:
SET
GET
e) Static Members & Inheritance
------------------------------------------
A derived class can inherit a static member.
Example :
using System;
class MyBase
{
public static int x = 25;
public static void Method()
{
Console.WriteLine("My Base static method");
}
}
class MyClass : MyBase
{
}
class MyClient
{
public static void Main()
{
MyClass.Method();
Console.WriteLine(MyClass.x);
}
}
Output :
My Base static method
25
A static member in C# can't be marked as override, virtual or abstract.
It is possible to hide a base class static method in a derived class
by using the keyword "new".
Example :
using System;
class MyBase
{
public static int x = 25;
public static void Method()
{
Console.WriteLine("My Base static method");
}
}
class MyClass : MyBase
{
public new static int x = 50;
public new static void Method()
{
Console.WriteLine(" My Derived static method");
}
}
class MyClient
{
public static void Main()
{
MyClass.Method();
Console.WriteLine(MyClass.x);
}
}
Output :
My Derived static method
50