PDA

View Full Version : overload عملگر مساوی =



amir_pro
یک شنبه 10 خرداد 1388, 19:20 عصر
آیا میشه عملگر = را آورلود کرد یا نه؟ اگه نمیشه ممکنه دلیل هم ذکر کنید!!!
چرا عملگر = را میشه با C++ آورلود کرد ولی با C# نمیشه؟

SMRAH1
یک شنبه 10 خرداد 1388, 19:45 عصر
سلام

تنها عملگری که نمیشه در #C رو نویسی کرد همین عملگر انتساب (یا =) است.
دلیلش بر می گرده به انواع داده ها!
در یک دسته بندی کلی داده های درون #C دو دسته اند :
1) داده های مقداری (value type) : مثل متغیر های معمولی int و float و ... و ساختارها
2) داده های مرجعی (Refrence Type) : مثل کلاسها و string و ..

در هنگامی که شما عبارت
a = b
رو می نویسید بسته به اینکه نوع b مقداری باشد یا مرجعی ،عملیات های متفاوتی صورت می گیرد.
اگر داده ها نوع مقداری باشند (مثلا a و b از نوع int هستند)،سیستم متغیر جدید a را با همان مقدار b مقداردهی می کند.
اما اگر متغیر از نوع مرجع باشند (مثلا a و b از نوع کلاس هستند)،سیستم دیگه یک متغیر جدید نمیسازه بلکه یک مرجع دیگه به همون متغیر اول ایجاد می کنه (a و b به یک شی واحد در حافظه اشاره می کنند).در واقع به همین دلیل است که که برای معرفی یک متغیر از کلاس فرضی MyClass می نویسیم:

MyClass cls = new MyClass();با این توضیحات ،خوده سیستم باید عمل انتساب رو مدیریت کنه.
اگر می خواهید یک متغیر جدید از (با همان مقادیر موجود) از یک شی Refrence type ایجاد کنید می توانید از متد Clone شی (برای کلاس های خودتون باید به شکل مناسب آن را باز نویسی کنید) استفاده کنید.

موفق باشید