Contratos de código: invariantes en clase abstracta

He encontrado un problema al usar Invariantes con contratos de código. Quiero definir una Invariante dentro de mi clase abstracta, pero simplemente se ignora. El siguiente código muestra mi interfaz y la clase abstracta.

[ContractClass(typeof(IPointContract))]
interface IPoint
{
    int X { get; }
    int Y { get; }
}

[ContractClassFor(typeof(IPoint))]
abstract class IPointContract : IPoint
{

    public int X
    {
        get { return 0; }

    }

    public int Y
    {
        get { return 0; }
    }

    [ContractInvariantMethod]
    private void PointInvariant()
    {
        Contract.Invariant(X > Y);
    }
}

Luego, implemento esta interfaz dentro de mi clase Point y creo un objeto a partir de ella. Esto debería al menos fallar durante el tiempo de ejecución.

class Point : IPoint
{
    public Point(int X, int Y)
    {
        this._x = X;
        this._y = Y;
    }

    private int _x;
    public int X
    {
        get { return _x; }
    }

    private int _y;
    public int Y
    {
        get { return _y; }
    }
}

class Program
{
    static void Main(string[] args)
    {
        Point p = new Point(1, 2);
    }
}

Cuando muevo la Invariante a la Clase de punto, funciona bien. Todas las demás condiciones previas o posteriores también funcionan bien.

¿No es posible tener invariantes dentro de una clase abstracta o lo estoy haciendo mal?

Respuestas a la pregunta(1)

Su respuesta a la pregunta