Wednesday, April 24, 2013

Static Constructor

A static constructor is used to initialize any static data, or to perform a particular action that needs performed once only. It is called automatically before the first instance is created or any static members are referenced.

Static constructors have the following properties:
  • A static constructor does not take access modifiers or have parameters.
  • A static constructor is called automatically to initialize the class before the first instance is created or any static members are referenced.
  • A static constructor cannot be called directly.
  • The user has no control on when the static constructor is executed in the program.
  • A typical use of static constructors is when the class is using a log file and the constructor is used to write entries to this file.
  • Static constructors are also useful when creating wrapper classes for un-managed code, when the constructor can call the LoadLibrary method.
you can't overload it; a static constructor is useful for initializing any static fields associated with a type (or any other per-type operations) - useful in particular for reading required configuration data into readonly fields, etc.

Static constructor are not thread safe. If there are multiple threads calling the constructor, then it will only initialize once and break your program.

Example
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace StaticConstructorExp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Main First Call");
            Test.myMethod();
            Console.ReadLine();
        }
    }
    class Test
    {
        static Test()
        {
            Console.WriteLine("Test Constructor Call");
        }
        public static void myMethod()
        {
            Console.WriteLine("MyMethod Call");
        }
    }
}

Output

Main First Call                                       
Test Constructor Call                                 
MyMethod Call                                         

No comments:

Post a Comment