ругается, что не может вернуть экземпляр абстрактного класса.
Покажи
abstract class Shape : IDrawable, ICloneable { public object Clone() => new Shape(this.X, this.Y); public Shape() { } public Shape(int x, int y) {...} }
У абстрактного класса нельзя создать экземпляр. Что по твоему должно делать выражение new Shape?
Да я понимаю, что это бессмысленное выражение. Просто неужели придется весь код Clone() в потомках заново переписывать? Есть какое нибудь решение?
Нормального решения в твоём случае нет Тебе видимо нужно чтобы потомок в методе Clone вызывал свой конструктор (int x, int y). Но к сожалению пока что сделать это можно только через рефлексии
Ну, правильно, так нельзя
abstract class Shape : IDrawable, ICloneable { public object Clone() => Clone(); public Shape() { } protected abstract Shape Clone(); public Shape(int x, int y) {...} }
Обсуждают сегодня