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

28 02 2010

کد کوتاهی که در ادامه خواهید دید، یکی از کاربردهای ویژگی 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);
}

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


کارها

Information

2 responses

1 03 2010
sirasad

جالب بود .

یاشا

2 02 2011
فرشته

عالی بود کامل و مفید خوب بود

پاسخی بگذارید

در پایین مشخصات خود را پر کنید یا برای ورود روی شمایل‌ها کلیک نمایید:

نشان‌وارهٔ وردپرس.کام

شما در حال بیان دیدگاه با حساب کاربری WordPress.com خود هستید. بیرون رفتن / تغییر دادن )

تصویر توییتر

شما در حال بیان دیدگاه با حساب کاربری Twitter خود هستید. بیرون رفتن / تغییر دادن )

عکس فیسبوک

شما در حال بیان دیدگاه با حساب کاربری Facebook خود هستید. بیرون رفتن / تغییر دادن )

عکس گوگل+

شما در حال بیان دیدگاه با حساب کاربری Google+ خود هستید. بیرون رفتن / تغییر دادن )

درحال اتصال به %s




%d وب‌نوشت‌نویس این را دوست دارند: