Logo: C# Computing
 
Web CsharpComputing.com

C# Tutorial Lesson 3: Static and instance members.

Static member of a class is shared by all instances of the class. Here is a simple example:

using System;
class Demo{
    public static int k;
    public int i;
    public void show(){
        Console.WriteLine("k={0} i={1}", k, i);
    }    
}
class Test{
public static void Main(){
    Demo a = new Demo();
    a.i = 1;
    Demo b = new Demo();
    b.i = 2;
    Demo.k = 4;
    a.show();
    b.show();
    }    
}

Output:

k=4 j=1
k=4 j=2

Class Demo has a static member k and an instance member i. Class Test has two objects of type Demo: a and b. Since k is static 

Instance variable i can have different values for different objects.

The second property is especially important. The compiler allocates static and non static objects with different addressing schemes and one has to be careful that no references are passed between static and non static members. Here is a simple example:

using System;
public class Test{
   public static void swap (ref int x, ref int y)
   {
      int temp=x;
      x = y;
      y = temp;
   }
   static void Main()
   {
      int a = 2;
      int b = 4;
      swap(ref a, ref b);
      Console.WriteLine("a={0}, b={1}",a,b);
   }
}

Main and swap are two static methods of class Test and they can pass references to each other. Alternatively you could pass a reference to an object:

using System;
public class Swap{
   public void swap (ref int x, ref int y)
   {
      int temp=x;
      x=y;
      y=temp;
   }
}
public class Test
{
   static void Main()
   {
      int a=2;
      int b=4;
      Swap hi = new Swap();
      
      hi.swap(ref a, ref b);
      Console.WriteLine ("a={0}, b={1}", a, b);
   }
}

I haven't discussed static members of methods. Could you come up with a simple example?