복제 할 수있는 몇 가지 클래스가 있습니다 : GenericRow
, GenericRows
, ParticularRow
및 ParticularRows
입니다. 다음과 같은 클래스 계층 구조가 있습니다. GenericRow
은 ParticularRow
의 부모이고 GenericRows
은 ParticularRows
의 부모입니다. 각 클래스는 ICloneable
을 구현합니다. 왜냐하면 각각의 인스턴스에 대한 전체 복사본을 만들 수 있기를 원하기 때문입니다.여러 클래스에서 ICloneable을 구현하는 중
object ICloneable.Clone()
{
object clone;
using (var stream = new MemoryStream())
{
var formatter = new BinaryFormatter();
// Serialize this object
formatter.Serialize(stream, this);
stream.Position = 0;
// Deserialize to another object
clone = formatter.Deserialize(stream);
}
return clone;
}
내가 다음 GenericRows
예를 들면, 간이 래퍼 방법을 제공 :
public GenericRows Clone()
{
return (GenericRows)((ICloneable)this).Clone();
}
을 나는 간이 래퍼 방법을 찾고 잘 나는 나 자신이 각 클래스에 Clone()
에 대한 동일한 코드를 작성 찾을 수 거의 코드가 아니기 때문에 각 클래스에서 거의 같습니다. 은이 클래스에 따라 반환 유형, 캐스트 등으로 다릅니다. 그러나 ICloneable.Clone()
은 과 동일합니다.은 4 개의 클래스 모두에서 동일합니다. 어떻게 든 추상화하여 한 곳에서만 정의 할 수 있습니까? 내 관심사는 몇 가지 유틸리티 클래스/object
확장 메서드를 만든 경우 제대로 복사 할 특정 인스턴스의 전체 복사본을 만들지 않을 것입니다. 어쨌든 좋은 생각입니까?
'T 레코드'매개 변수 선언에 'this'를 추가하면 각 클래스에 Clone 메소드가 필요하지 않습니다 (즉, DeepCopyViaBinarySerialization을 확장 메소드로 변경). – dtb
ICloneable에 대한 논쟁의 링크 : http://blogs.msdn.com/b/brada/archive/2004/05/03/125427.aspx – drewburlingame