Почему подклассы не могут создавать новые объекты с помощью конструктора, защищенного базовым классом?

Я портирую некоторый код Java на C #, и я столкнулся с этой идиомой, используемой для копирования объектов:

class Base
{
    int x;
    public Base(int x) { this.x = x; }
    protected Base(Base other) { x = other.x; }
}

class Derived : Base
{
    Base foo;
    public Derived(Derived other)
        : base(other)
    {
        foo = new Base(other.foo); // Error CS1540
    }
}

Ошибка CS1540:

Невозможно получить доступ к защищенному элементу 'Base.Base (Base)' через квалификатор типа «Базовый»; квалификатор должен иметь тип 'Derived' (или производный от него)

Я понимаю цель этой ошибки: она предотвращает доступ к защищенным членам родственных типов. Но Base.Base (Base), очевидно, не будет вызываться для родственного типа! Это просто не включено в спецификацию, или я упустил какую-то причину, по которой это было бы небезопасно?

РЕДАКТИРОВАТЬ: Ага, идиома была новая база (other.foo) не новая База (другое)

9
задан Pranay Rana 7 June 2011 в 17:49
поделиться