Как клонировать унаследованный объект?
у меня естьTile
класс с этим методом:
public object Clone()
{
return MemberwiseClone();
}
И еще один классChecker
что наследует отTile
.
у меня тоже естьBoard
класс, который являетсяList<Tile>
, Я хочу клонировать доску, поэтому я написал это:
public Board Clone()
{
var b = new Board(width, height);
foreach (var t in this) b.Add(t.Clone());
return b;
}
Но это выдает ошибку:
невозможно преобразовать из объекта в Checkers.Tile
Теперь я могу сделатьTile.Clone
метод вернутьTile
вместо этого, но тогда будетMemberwiseClone
скопировать дополнительные свойства вChecker
также?
Если это не проблема, в чем семантическая разница междуBoard.Clone
метод а это?
public Board Clone()
{
using (var ms = new MemoryStream())
{
var bf = new BinaryFormatter();
bf.Serialize(ms, this);
ms.Position = 0;
return (Board)bf.Deserialize(ms);
}
}
Потому что они определенно влияют на мою программу, даже когда я печатаю на нейвыглядит тот же самый. Я не думаю, что что-то происходитклонированный но ссылка возвращается.Board
Ctor выглядит так:
public Board(int width = 8, int height = 8)
{
this.width = width;
this.height = height;
this.rowWidth = width / 2;
this.Capacity = rowWidth * height;
}
Tile
класс на самом деле не имеет никаких свойств. У проверки есть только два свойства перечисления:
public enum Color { Black, White };
public enum Class { Man, King };
public class Checker : Tile
{
public Color Color { get; set; }
public Class Class { get; set; }