我想在抽象基類中實現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
你可能只是做'克隆'抽象,因爲子類是知道如何克隆自己的。 – juharr
@Luaan你認爲基於反思的方法會做什麼? – heltonbiker