То, что он хочет сказать:
«Если у вас есть два класса, которые разделяют те же самые свойства, которые вы можете бросить объект из класса a
к классу b
и автоматически сделать систему понять назначение через общие имена свойств? "
Вариант 1: Использование отражения
Неудобство: Это собирается замедлять больше, чем вы думаете.
Вариант 2: Сделать один класс производным от другого, первого с общими свойствами и другим расширением этого.
Недостаток: в сочетании! если вы сделаете это для двух слоев в своем приложении, тогда два слоя будут соединены!
Пусть имеется:
class customer
{
public string firstname { get; set; }
public string lastname { get; set; }
public int age { get; set; }
}
class employee
{
public string firstname { get; set; }
public int age { get; set; }
}
Теперь здесь является расширением для типа объекта:
public static T Cast<T>(this Object myobj)
{
Type objectType = myobj.GetType();
Type target = typeof(T);
var x = Activator.CreateInstance(target, false);
var z = from source in objectType.GetMembers().ToList()
where source.MemberType == MemberTypes.Property select source ;
var d = from source in target.GetMembers().ToList()
where source.MemberType == MemberTypes.Property select source;
List<MemberInfo> members = d.Where(memberInfo => d.Select(c => c.Name)
.ToList().Contains(memberInfo.Name)).ToList();
PropertyInfo propertyInfo;
object value;
foreach (var memberInfo in members)
{
propertyInfo = typeof(T).GetProperty(memberInfo.Name);
value = myobj.GetType().GetProperty(memberInfo.Name).GetValue(myobj,null);
propertyInfo.SetValue(x,value,null);
}
return (T)x;
}
Теперь вы использовать его как это:
static void Main(string[] args)
{
var cus = new customer();
cus.firstname = "John";
cus.age = 3;
employee emp = cus.Cast<employee>();
}
Метод литых проверяет общие свойства между двумя объектами и выполняет назначение автоматически.
Этот код не имеет смысла. Почтовый код, который компилируется (это не проблема, это проблема). –
Довольно суровый. Отсутствие ключевого слова 'class' не имеет смысла. – nawfal
Имеются существующие библиотеки картографа, написанные уже для этой цели. Они обрабатывают намного больше случаев. Вы можете это сделать. – nawfal