gì ông muốn nói là:
"Nếu bạn có hai lớp mà chia sẻ hầu hết các tính chất tương tự bạn có thể cast một đối tượng từ lớp a
đến lớp b
và tự động làm cho hệ thống hiểu được nhiệm vụ thông qua chia sẻ tên thuộc tính? "
Tùy chọn 1: Sử dụng phản chiếu
Bất lợi: Nó sẽ làm chậm bạn nhiều hơn bạn nghĩ.
Tùy chọn 2: Làm cho một lớp bắt nguồn từ một lớp khác, thuộc tính đầu tiên có thuộc tính chung và phần mở rộng khác.
Bất lợi: Đã kết hợp! nếu bạn đang làm điều đó cho hai lớp trong ứng dụng của bạn thì hai lớp sẽ được ghép nối!
Let There Be:
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; }
}
Bây giờ đây là một phần mở rộng cho loại đối tượng:
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;
}
Bây giờ bạn sử dụng nó như thế này: kiểm tra cast
static void Main(string[] args)
{
var cus = new customer();
cus.firstname = "John";
cus.age = 3;
employee emp = cus.Cast<employee>();
}
Phương pháp tài sản chung giữa hai đối tượng và thực hiện nhiệm vụ tự động.
Mã này không có ý nghĩa. Mã bưu điện biên dịch (nó không phải là diễn viên đó là vấn đề). –
Khá khắc nghiệt .. Thiếu một từ khóa 'lớp' không mang ý nghĩa đi. – nawfal
Hiện có các thư viện bản đồ nhẹ có sẵn được viết cho mục đích chính xác này. Họ xử lý nhiều trường hợp cạnh hơn. Bạn có thể google nó. – nawfal