Sunday, January 18, 2015

static in c#

Understanding Static

When you want to define a class member that will be used independently of any object of that class. Normally, a class member must be accessed through an object of its class. But it is possible to crate a member that can be used by itself, without reference to a specific instance. To create such a member, precede its declaration with the keyword Static, when a member is declared static, it can be accessed before any objects of its class are created and without reference to any object. You can declare both methods and variables to be static. The most common example of static member is Main(), which is declared static because it must be called by the operating system when your program begins.

Outside the class, to use a static member, you must specify the name of its calls followed by the dot operator.

For example: Timer.count =10;

Here Timer is the name of class and count is static member.

Variable declared as static are, essentially, global variables. When objects of its class are declared, no copy of a static variable is made. Instead all instead of class share the same static variable. Static variable is initialized before its class is used. If no explicit initializer is specified, it is initialized to Zero for numeric type, null in the case of reference types, or false for variable of type bool. Thus static variable always have a value.

Example

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace @static
{
    class staticdemo
    {
        public static int val = 10;
        public static int valdiv()
        {
            return val / 2;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("initial value of static variable is " + staticdemo.val);
            staticdemo.val = 100;
            Console.WriteLine("static variable value after reinitialized " + staticdemo.val);
            Console.WriteLine("after method valdiv() called value " + staticdemo.valdiv());
            Console.Read();
        }
    }
}

Output


Some important point that apply to static method.
A static method does not have a this reference. This is because a static method does not execute relative to any object.

A static method can directly call only other static methods of its class. It cannot directly call an instance method of its class. The reason is that instance methods operate on specific objects, but a static method is not called on an object. Thus, on what object would the instance method operate?

A similar restriction applies to static data. A static method can directly access only other static data defined by its class. It cannot operate on an instance variable of its class because there is no object to operate on.

Note: Above declared point exception also occurs. Which are describing below?

It is important to understand that a static method can call instance methods and access instance variables of its class if it does of that class.

For example

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace static_exception
{
    class staticexp
    {
        public int i;
        public void show()
        {
            this.i = 55;
            Console.WriteLine("this is non-static method");
        }
        
        public static int a;
        public static void display(staticexp obj)
        {
            obj.show();// non static called from static method
            obj.i = 200;
            a = 100;
            //this.a = 10; illigal because static method does not have this refernce
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            staticexp obj = new staticexp();
            staticexp .display (obj);
            Console.Read();
        }
    }
}

Output

                                       

                                                                                 
Author- Sayta Prakash

2 comments: