Кодовые контракты: инварианты в абстрактном классе

Я столкнулся с проблемой при использовании инвариантов с кодовыми контрактами. Я хочу определить Инвариант в моем абстрактном классе, но он просто игнорируется. Код ниже показывает мой интерфейс и абстрактный класс.

[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);
    }
}

После этого я реализую этот интерфейс в своем классе Point и создаю из него объект. Это должно по крайней мере потерпеть неудачу во время выполнения.

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);
    }
}

Когда я перемещаю Инвариант в Point-Class, он работает нормально. Все остальные предварительные или последующие условия тоже работают нормально.

Разве невозможно иметь инварианты в абстрактном классе или я делаю это неправильно?

Ответы на вопрос(1)

Ваш ответ на вопрос