Клонирование объектов, например, каких-нибудь простых 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+ медленнее приведенных выше.
Комментариев нет:
Отправить комментарий