ICloneable.Clone()
を抽象基本クラスに実装しようとしているので、サブクラスで気にする必要はありません。 そのクラスの基本的な責任は、クローンに渡すべき内部のGuid
プロパティを持つことです。つまり、 "プロパティクローン"に似ています。これにより、リポジトリから取得したアイテムを複製し、元のアイテムを変更せずにそのプロパティを変更し、その後Idで認識できるように変更されたインスタンスをリポジトリにサブミットすることができます。抽象基本クラスにカスタムICloneable実装を実装する
私の現在の実装は問題に直面しています:クラスが抽象であるため、IDを渡すインスタンスを作成できません!
public abstract class RepoItem : ICloneable, IEquatable<RepoItem>
{
protected RepoItem()
{
Id = Guid.NewGuid();
}
private RepoItem(Guid id)
{
Id = id;
}
public Guid Id { get; private set; }
public object Clone()
{
return new RepoItem(Id); // cannot create instance of abstract class
}
public bool Equals(RepoItem other)
{
return other.Id == Id;
}
}
この問題を解決する方法はありますか?これはまずまずのデザインですか?既にコメントで説明し
とにかくタイプが間違っています。そして、問題は、あなたが正しいタイプが基本クラスにあるべきであるかどうか分かりません。実際のランタイムタイプのインスタンスを作成する必要があります。派生したクラスを実装する抽象メソッドを使用します。 – Luaan
子クラスが自分自身をクローンする方法を知っているクラスなので、 'Clone'抽象を作成することもできます。 – juharr
@Luaanリフレクションベースのアプローチではどうなると思いますか? – heltonbiker