Here's a fun one I ran into yesterday... not exactly part of this thread but I don't think it's justified to start a new thread:
Given an abstract class, create a field that is readonly which can be set by inheriting classes.
const fields are compiler time only.
readonly fields are allowed to be set at runtime in the constructor or as a field initialization. This definition is a little gray in addressing "what about inheriting types and their constructors?"
The answer is that readonly cannot be set by the inheriting class.
Here's one way to get that functionality though:
public abstract class A
protected readonly int myField;
protected A(int myField)
this.myField = myField;
public class B:A
public B(): base(4) // valid
// base.myField = 4; // invalid