There's a subtle difference if you call virtual methods from your constructor, which is generally not advisable. When generating IL code for the constructor, the C# compiler puts code for all field initializers before code for the constructor's body This means that overridden will see initialized values for field initialized members, but will see default values for others.
<br /><br />class Base<br />{<br /> protected int x = 42;<br /> protected int y;<br /><br /> public Base()<br /> {<br /> SomeVirtualMethod();<br /> y = 42;<br /> }<br /><br /> protected virtual void SomeVirtualMethod() {}<br />}<br /><br />class Derived : Base<br />{<br /> protected override void SomeVirtualMethod()<br /> {<br /> Console.WriteLine(x);<br /> Console.WriteLine(y);<br /> }<br />}<br /><br />
prints 42 and 0.