Я нашел следующий фрагмент кода, который озадачил меня.C# - наследование + отражение - как не клонировать объект
public class Bclass : Aclass
{
public const BindingFlags Flags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance;
public Bclass(IAclass a) : base(string.Empty)
{
var destFields = this.GetType().BaseType.GetFields(Flags);
a.GetType().GetFields(Flags).Where(x => destFields.Contains(x)).ToList().ForEach(property =>
{
destFields.First(x => x == property).SetValue(this, property.GetValue(a));
});
var destProperties = this.GetType().BaseType.GetProperties(Flags);
a.GetType().GetProperties(Flags).Where(x => destProperties.Contains(x)).ToList().ForEach(property =>
{
destProperties.First(x => x == property).SetValue(this, property.GetValue(a, null));
});
}
// some more methods...
}
Мой главный Q является .... почему бы кто-то думает, что делать ... Какая польза (ы) может выйти из этого кода.
Это похоже на * действительно, действительно * плохо реализованный квантованный клоун от 'a' в новый экземпляр , Это выглядит ужасно и очень неэффективно –
Protip: используйте AutoMapper. – leppie
Зачем кому-то заниматься? Копировать поля? Или этот ужасный код вообще? На мой взгляд, рефлексия обычно является плохим вызовом в конструкторах. Вы спрашиваете о преимуществах, но против чего? Пожалуйста, уточните, что вы хотите от этого. –