Adding setters to properties in overrides

Почему разрешено изменять видимость и существование геттеров или сеттеров в свойстве при реализации интерфейса?

interface IFoo
{
    string Bar { get; }
}

class RealFoo : IFoo
{
    public RealFoo(string bar)
    {
        this.Bar = bar;
    }

    public string Bar { get; private set; }
}

class StubFoo : IFoo
{
    public string Bar { get; set; }
}

... и незаконно делать то же самое при реализации абстрактного класса?

abstract class AbstractFoo : IFoo
{
    public abstract string Bar { get; }
}

class RealFoo : AbstractFoo
{
    public RealFoo(string bar)
    {
        this.Bar = bar;
    }

    // Cannot override because 'Bar' does not have an overridable set accessor
    public override string Bar { get; private set; }
}
16
задан ndeuma 19 May 2011 в 12:05
поделиться