0
As the destructor will be called on a separate thread, you'll need to suspend the main thread for a short interval (say 100 milliseconds) to allow the static Count property to be updated.
You'll also need to set 'e1' to null
after calling e1.Dispose() to prevent a null reference exception.
So try this:
public static void Main()
{
Employee e1 = new Employee("A","1",5000);
Employee e2 = new Employee("B","2",6000);
Employee e3 = new Employee("C","3",7000);
Employee e4 = new Employee("D","4",2000);
Console.WriteLine("Constructor called {0} times ",Employee.count);
e1.Dispose();
e1 = null;
e3.Dispose();
e3 = null;
GC.Collect();
System.Threading.Thread.Sleep(100);
Console.WriteLine("Constructor called {0} times ", Employee.count);
}