View Full Version : سوال: بهترین روش کلون کردن یک شی
یوسف زالی
یک شنبه 27 اسفند 1391, 20:47 عصر
سلام.
چه راههایی برای Clone کردن یک شی می شناسید؟
یکی از روشها استفاده از سریالایز هست.
روشهای دیگه چه چیزهایی هست و کدام یک بهتره؟
ممنون از پاسخ هاتون
BORHAN TEC
یک شنبه 27 اسفند 1391, 23:55 عصر
راه حل دیگه استفاده از RTTI است ولی در این حالت اشیای ما باید از نسل TComponent و نسلهای بعد از اون باشه.
راه حل دیگه انتساب یک شی به شی دیگر است ولی در این حالت هر دو شی به یک حافظه خاص از حافظه اشاره می کنند و با تغییر ویژگی های یکی از اشیا دیگری هم تغییر می کنه که این مورد زیاد جالب نیست.
راه حل دیگه کپی یک شی در دیگری است. به صورت زیر :
http://stackoverflow.com/questions/4041760/correct-way-to-duplicate-delphi-object
یوسف زالی
دوشنبه 28 اسفند 1391, 00:24 صبح
در خصوص اختصاص دو اشاره گر به یک شی، این که نشد کلون!
روشی که تو اون لینکه یک کپی سازی هست. می خواستم در حقیقت از فضای حافظه یک شی کپی بگیرم!
در مورد استفاده از RTTI لطفا توضیح بده.
منظورت استفاده از دستوراتی مثل دستورات یونیت TypInfo هست؟
این دستورات در ورژن هایی مثل 7 هم کارایی دارند؟
ممنون شاهین جان
BORHAN TEC
دوشنبه 28 اسفند 1391, 01:12 صبح
در خصوص اختصاص دو اشاره گر به یک شی، این که نشد کلون!
دقیقاً همینطوره :خجالت:
روشی که تو اون لینکه یک کپی سازی هست. می خواستم در حقیقت از فضای حافظه یک شی کپی بگیرم!
باید ببینم که میتونم راه حل سر راست تری پیدا کنم یا نه. چون الان در این مورد حضور ذهن ندارم. سوادم رو جایی جا گذاشتم و الان بهش دسترسی ندارم! :لبخند:
در مورد استفاده از RTTI لطفا توضیح بده.
منظورت استفاده از دستوراتی مثل دستورات یونیت TypInfo هست؟
بله درواقع یونیت TypeInfo قابلیت های کمتری دارد و تا اونجایی که یادمه در اون نمیشه به فیلدهای private مربوط به کلاسها دسترسی داشت ولی در نسخه های جدیدتر به شمار این قابلیت ها اضافه شده و البته باید از یونیت RTTI استفاده کنید نه TypeInfo. خوشبختانه در این مورد فیلمها و مستندات زیادی منتشر شده است مثل کتاب آقای Bob Swart که کف اینترنت ریخته. سه ویدئو از Robert Love. یک ویدئو از Barry Kelly (عضو گروه توسعه دهنده کامپایلر دلفی که به تازگی این گروه را ترک کرد) و ده ها منبع دیگه.
این دستورات در ورژن هایی مثل 7 هم کارایی دارند؟
از اونجایی که در نسخه های قدیمی فقط می توانید از یونیت TypeInfo استفاده کنید طبیعتاً قابلیتهای کمتری در اختیارتان خواهد بود.
Ananas
دوشنبه 28 اسفند 1391, 08:08 صبح
سلام.
اگه کلاس رو خودتون تعریف میکنید که مشکلی نیست یک تابع clone براش تعریف کنید. تا منظور و مقصود شما از clone چی باشه چون کلاس ها هر کدوم ممکنه اطلاعاتی مثل اشاره گر به کلاس های دیگه یا اشاره گر به آرایه و یا ساختمان یا هندل اشیا یا هر چیز دیگه ای دشته باشن، تو این شرایط می خوایم چه کاری انجام بشه؟ مطمئنا تو شرایط مختلف انتظار متفاوتی داریم و این رو برنامه تشخیص نمیده و ما باید اینو بهش بگیم (تعریف تابع clone). مثلا یک form داره از منابعی استفاده میکنه که اگه داده های کلاسی اون رو هم به شکل باینری جای دیگه ذخیره کنیم بازم مشکل یکی بودن آدرس منابع رو داریم. پس ما باید صریحا بگیم clone کردن شی فلان باید چطوری باشه و کدوم اشاره گرها باید دوباره حافظه براشون گرفته بشه و اطلاعات توشون کپی بشه و کدوم اشاره گرها باید فقط آدرس کپی بشه.
یوسف زالی
دوشنبه 28 اسفند 1391, 10:06 صبح
خب دقیقا مشکل همین آدرس هاست وگرنه از آدرس شروع شی تا پایانش رو کپی می کردیم.
پس با این حساب فکر می کنم ساده ترین راه حل همون سریالایز باشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.