title: Protected readonly field vs protected property
body: <p>I have an abstract class and I'd like to initialize a readonly field in its protected constructor. I'd like this readonly field to be available in derived classes.</p>
  
  <p>Following my habit of making all fields private and exposing properties, I implemented this as follows:</p>
  
  <pre><code>abstract class Foo
  {
      private readonly int _field;
  
      protected Foo(int field)
      {
          _field = field;
      }
  
      protected int Field
      {
          get { return _field; }
      }
  }
  </code></pre>
  
  <p>But then I wondered if there is really much advantage of keeping the field private here. I'm aware of the advantages of properties and there are several SO questions on this issue in general, but they focus on public fields as opposed to protected ones.</p>
  
  <p><em><strong>So should I switch to the below implementation or not?</em></strong> What are the considerations and advantages/disadvantages to be aware of in either case?</p>
  
  <pre><code>abstract class Foo
  {
      protected readonly int _field;
  
      protected Foo(int field)
      {
          _field = field;
      }
  }
  </code></pre>