title: Why can non-static method access static field?
body: <p>I know that static method cannot access fields that are instance fields, What it confuses me is: why non-static method can access static filed currentID? In the code below, currentID is static field, getNextID is a static function. Surprisingly, it passes the compilation without error.  </p>
  
  <pre><code> public class WorkItem
  {
  // Static field currentID stores the job ID of the last WorkItem that 
  // has been created. 
  private static int currentID;
  
  //Properties. 
  protected int ID { get; set; }
  protected string Title { get; set; }
  protected string Description { get; set; }
  protected TimeSpan jobLength { get; set; }
  
  public WorkItem()
  {
      ID = 0;
      Title = "Default title";
      Description = "Default description.";
      jobLength = new TimeSpan();
  }
  
  // Instance constructor that has three parameters. 
  public WorkItem(string title, string desc, TimeSpan joblen)
  {
      this.ID = GetNextID();
      this.Title = title;
      this.Description = desc;
      this.jobLength = joblen;
  }
  
  // Static constructor to initialize the static member, currentID. This 
  // constructor is called one time, automatically, before any instance 
  // of WorkItem or ChangeRequest is created, or currentID is referenced. 
  static WorkItem()
  {
      currentID = 0;
  }
  
  
  protected int GetNextID()
  {
      // currentID is a static field. It is incremented each time a new 
      // instance of WorkItem is created. 
      return ++currentID;
  }
  
  }
  </code></pre>