انتقال اطلاعات بین دو کلاس مختلف

۱۳۸۸/۱۲/۱۰ ۳:۰۳ Salar https://www.blogger.com/profile/08261083424775464146 منتشر شده در تاریخ : ۱۳۸۸/۱۲/۱۰ دسته بندی : ، ، ، 1

کد کوتاهی که در ادامه خواهید دید، یکی از کاربردهای ویژگی Reflection دات نت رو در برنامه نویسی روزمره نشون میده. کاربرد این کد بسیار ساده است در عین حال می تواند خیلی مفید هم باشد.  با یک مثال نشان خواهم که چقدر می تواند در برنامه نویسی به کمکتون بیاد.

کاری که این کد انجام میده، کپی کردن مقادیر ویژگی های عمومی (public property) هست. به عبارت دقیق تر مقادیر ویزگی های یک شیئ را به مقادیر ویژگهای همنام از شیئ دیگر کپی میکند.

این دو شیئ لازم نیست که هم نوع باشند. تنها شرط لازم داشتن ویژگیهای همنام هست. در صورتی که ویزگی ها نوع های متقاوتی داشته باشند، عمل کپی برای آن ویژگی انجام نخواهد شد.

مسلما می توانید این کد رو ویرایش کنید تا با نیاز های شما سازگاری بیشتری داشته باشد، اما قبل این کار باید کد را ببینید:
public static void CopyPropertiesValue(object sourceModel, object destModel)
{
Type sourceType = sourceModel.GetType();
Type destType = destModel.GetType();

foreach (PropertyInfo srcProp in sourceType.GetProperties())
{
PropertyInfo destProp = destType.GetProperty(srcProp.Name, BindingFlags.SetProperty | BindingFlags.Instance | BindingFlags.Public);
if (destProp!=null)
{
try
{
destProp.SetValue(destModel, srcProp.GetValue(sourceModel, null), null);
}
catch { }
}
}
}

همانطور که مشخص هست ورودی این تابع یک شیئ مبدا و یک شیئ مقصد برای انجام عمل کپی دریافت می کند که نوع ورودی ها مهم نبوده و از نوع آبجکت است.

  • مثالی از کاربرد


شاید با مثال بهتر بتوان به کاربر این تابع پی برد.

ابتدا تعاریف کلاسهای مورد استفاده:
class Person
{
public int PersonID { get; set; }
public string PersonName { get; set; }
public string PersonFamily { get; set; }
}
class Car
{
public int CarID { get; set; }
public int PersonID { get; set; }
public string CarModel { get; set; }
}

/// <summary>
/// کلاسی از ترکیب آن دو کلاس
/// </summary>
class Person_Car
{
public int CarID { get; set; }
public int PersonID { get; set; }
public string CarModel { get; set; }
public string PersonName { get; set; }
public string PersonFamily { get; set; }
}

در این نمونه کد مشاهده می کنید که مقادیر را می توانیم از کلاس Person_Car به دو کلاس بعدی انتقال دهیم:
public static void CopyModelTest()
{
Person person = new Person();
Car car = new Car();
Person_Car pCar = new Person_Car()
{
CarID = 10,
PersonID = 1,
CarModel = "ژیان :=)" ,
PersonFamily = "خلیل زاده",
PersonName = "سالار"
};

CopyPropertiesValue(pCar, car);

// کپی به کلاس Person
CopyPropertiesValue(pCar, person);
}

این تابع خیلی به من کمک کرده، امیدوارم که برای شما هم مفید باشه.

 

یک بازخورد برای “انتقال اطلاعات بین دو کلاس مختلف”