Why do abstract methods need to be implemented with override, when interfaces don't? E.g.:

    class X
    {
        abstract void foo();
    }

    class Y : X
    {
        override void foo() {}
    }

vs

    interface X
    {
        abstract void foo();
    }

    class Y : X
    {
        void foo() {}
    }

This is a bit of a problem for a design I'm doing with template/mixin magic, making it a bit less magical. If you don't want to change this, would you consider at least providing some kind of pragma / attribute to work around it? E.g.

    class X
    {
        pragma(nooverride, foo); // this or the following
@nooverride abstract void foo(); // ugly OK, X is hidden for user
    }

    class Y : X
    {
        void foo() {}
    }

Thanks! :-)

Reply via email to