using System; using System.Collections.Generic; class A { protected virtual int BaseM { get { return 2; } set { throw new ApplicationException ("it should not be called"); } } } class B : A { protected override int BaseM { set { } } } struct S { public IEnumerable GetIt () { yield return base.GetHashCode (); } } class X : B { protected override int BaseM { set { throw new ApplicationException ("it should not be called"); } } IEnumerable GetIt () { yield return base.BaseM++; } public static int Main () { foreach (var v in new X ().GetIt ()) Console.WriteLine (v); foreach (var v in new S ().GetIt ()) Console.WriteLine (v); return 0; } }