일부 엔티티를 복제해야하고이 코드를 작성했습니다. 객체를 복제하는 좋은 방법
public override object Clone()
{
var CloneUser = base.Clone() as FMSUser;
CloneUser.Username = this.Username;
CloneUser.IsEnabled = this.IsEnabled;
CloneUser.IsNeedPasswordReset = this.IsNeedPasswordReset;
CloneUser.LastName = this.LastName;
CloneUser.FirstName = this.FirstName;
CloneUser.MiddleName = this.MiddleName;
CloneUser.DistributorID = this.DistributorID;
CloneUser.IsLocked = this.IsLocked;
return CloneUser;
}
그러나
는 내 동료는이 방법을 복제하는 것이 좋습니다 말하고, 나에게이 코드를 보냈는데 왜 말 안 할 수public FMSUser(FMSUser user)
{
this.Username = user.Username;
this.IsEnabled = user.IsEnabled;
this.IsNeedPasswordReset = user.IsNeedPasswordReset;
this.LastName = user.LastName;
this.FirstName = user.FirstName;
this.MiddleName = user.MiddleName;
this.DistributorID = user.DistributorID;
this.IsLocked = user.IsLocked;
}
public override object Clone()
{
return new FMSUser(this);
}
이 두 번째 방법이 더 나은 이유를 설명해 anynone 수 ?
당신은 일반적으로'Clone'을 피해야한다. 대신에'DeepClone' 메쏘드 (또는 원하는 이름)를 제공하십시오. deep 또는 shallow 복사본을 사용하여'Clone'이 어떻게 구현되는지 알지 못합니다. –
코드가 매개 변수 기반의 컨스트럭터에서 사용될 수 있도록 그냥 감쌌다. 그러나 두 번째 방법은 기본 클래스에 아무 것도하지 않으므로 기본 클래스는 복제 된 값 대신 기본값을 갖게됩니다. – Tarec
클론이 이것을 수행하는 가장 좋은 방법이라고 생각하지 않습니다. 대신 리플렉션을 사용하고 속성을 동적으로 복제 할 수 있습니다. 속성이 동일하고 (동일한 유형, 이름 등) 한 객체에서 다른 객체로 액세스 할 수있는 한 클래스의 변경 사항에 대해 걱정할 필요가 없습니다. – stripthesoul