Клонирование объектов, например, каких-нибудь простых DTO (data transfer object) или настроек можно выполнить с помощью MemberwiseClone:
| | public string Name { get; set; } |
| | public int Value { get; set; } |
| | public Settings CloneMemberwise() |
| | return (Settings)this.MemberwiseClone(); |
По быстродействию это практически аналогично копированию свойств:
| public Settings SimpleClone() |
| | return new Settings() { Value = this.Value, Name = this.Name }; |
Но, бывает, что быстродействие некритично, класс невозможно наследовать (у класса определен модификатор sealed), а свойств много:
| | public string Prop1 { get; set; } |
| | public string Prop20 { get; set; } |
В таком случае клонировать можно с помощью reflection (отражение) и методов расширения:
| public static class InfoHelper |
| | public static Info Clone(this Info src) |
| | foreach (var prop in src.GetType().GetProperties()) |
| | if (prop.CanWrite == false) |
| | var val = prop.GetValue(src, null); |
| | prop.SetValue(ret, val, null); |
Надо заметить, что этот способ раз в 6+ медленнее приведенных выше.
Комментариев нет:
Отправить комментарий