C# static tutorial explains the static modifier keyword in C#. In classes, interfaces, and structs, we can use the static modifier for fields, methods, properties, operators, events, and constructors.
last modified July 5, 2023
In this article we cover the static modifier keyword in C#.
A static member belongs to the type rather than to a specific object.
Console.WriteLine(Math.Abs(-5));
Here, the Abs is a static method which belongs to a static Math type. We refer to the method by the type name followed by a dot operator and a member method name.
In classes, interfaces, and structs, we can use the static modifier for fields, methods, properties, operators, events, and constructors.
Static methods can work only with static members; they cannot access instance variables.
The following are features of a static class:
- contains only static members
- cannot be instantiated
- is sealed; other classes cannot inherit from it
- cannot contain instance constructors
The following are features of a static constructor:
- a class or struct can only have one static constructor
- static constructors cannot be inherited or overloaded
- a static constructor cannot be called directly
- it is automatically called by the common language runtime
if we don't provide a static constructor to initialize static fields,
all static fields are initialized to their default values
A static member belongs to the type.
Program.cs
namespace StaticMember;
static class MyMath { public static double PI = 3.14159265358979323846; }
class Program { static void Main(string[] args) { Console.WriteLine(MyMath.PI); Console.WriteLine(Math.Abs(-5)); } }
We have a static MyMath class which contains a single static member.
Console.WriteLine(MyMath.PI); Console.WriteLine(Math.Abs(-5));
We refer to the static PI member of our MyMath class. Also, we refer to the static Abs method of the built-in Math class.
$ dotnet run 3.141592653589793 5
A static method can access only static variables. It cannot access instance variables. A static method can only call other static methods.
Program.cs
namespace SimpleEx;
class Program { static int i = 0;
static void Main(string[] args)
{
Console.WriteLine(i);
i = i + 5;
Console.WriteLine(i);
Inc();
Console.WriteLine(i);
Dec();
Console.WriteLine(i);
}
static void Inc()
{
i = i + 1;
}
static void Dec()
{
i = i - 1;
}
}
In the example, we have a static variable i and static methods Main, Console.WriteLine, Inc, and Dec.
static void Main(string[] args) …
The Main method is a classic entry point of a C# application. Inside a static Main method, we can call only static methods.
$ dotnet run 0 5 6 5
The static keyword is used to define extension methods. Extension methods are methods that can be inserted to existing types without creating a new derived type, recompiling, or otherwise modifying the original type.
Program.cs
var vals = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8 };
vals.Shuffle();
var res = string.Join(" “, vals); Console.WriteLine(res);
static class MyExtensions { private static Random rng = new Random();
public static void Shuffle<T>(this IList<T> vals)
{
int n = vals.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = vals[k];
vals[k] = vals[n];
vals[n] = value;
}
}
}
In the example, we define a Shuffle extension method.
vals.Shuffle();
We call the Shuffle extension method. The compiler translates it into the MyExtensions.Shuffle(vals);.
static class MyExtensions
The extension method is defined inside a static class.
private static Random rng = new Random();
The member that we use to generate random order is static.
public static void Shuffle<T>(this IList<T> vals)
The Shuffle method is declared with the static modifier as well.
$ dotnet run 8 7 5 4 1 6 3 2 $ dotnet run 1 3 6 8 5 7 2 4
The using static allows us to access static members and nested types of a type without having to qualify the access with the type name.
Program.cs
using static System.Math;
Console.WriteLine(Sqrt(33 + 44));
In the example, we import the Sqrt method into our namespace.
static modifier - language reference
In this article we have worked with the static modifier in C#.
My name is Jan Bodnar, and I am a passionate programmer with extensive programming experience. I have been writing programming articles since 2007. To date, I have authored over 1,400 articles and 8 e-books. I possess more than ten years of experience in teaching programming.
List all C# tutorials.