tgoop.com/fullStackDevs/738
Last Update:
🔰تا حالا به این فکر کردین وقتی توی سی شارپ operator ای رو overload می کنین چه اتفاقی می افته ؟
▫️به طور کلی بعضی زبان های برنامه نویسی، اجازه overload کردن operator ها رو بهتون میدن، برای مثال در سی شارپ، تایپ های string, decimal, datetime عملگرهای == و != overload کردن.
🔰از نظر CLR اما overload کردن یک operator به چه شکله؟
▫️درواقع برای CLR اورلود کردن یک operator باعث به وجود اومدن شرایط خاصی نمیشه چون اصلا CLR اطلاعی نداره که یک operator مثل (+) چه معنی ای میده.
درواقع زبان برنامه نویسی که ازش استفاده میکنین برای نمایش این operator ها از symbol هایی استفاده میکنه و مشخص میکنه که درهنگام استفاده از این symbol ها چه کدی باید تولید بشه.
🔹️برای مثال درسی شارپ استفاده از سیمبل + برای primitive تایپی مثل int باعت میشه تا کامپایلر کدی رو برای جمع کردن اونها باهم تولید کنه و یا وقتی ازسیمبل + برای تایپ های string استفاده میکنین، کامپایلر کد concatenate براشون تولید میکنه.
🔸️ناگفته نمونه که از طرف CLS ولی یک سری قوانین وجود داره که overload یک operator حتما باید public و static باشه.
▫️با overload کردن یک operator در سی شارپ، کامپایلر متدی رو برای مشخص کردن آنچه که operator باید انجام بده تولید میکنه.
اسم این متد به اضای هر operator برای کامپایلر یک اسم خاص هستش و اگه تایپتون از قبل متدی همنام با این متد و پارامتر های یکسان داشته باشه با یک ارور مواجه میشین.
🔹️برای مثال وقتی کامپایلر سی شارپ با عملگر + در سورس کد مواجه میشه، در operand های این operator به دنبال متدی با نام خاص op_Addition می گرده و اگه نتونه چنین متدی با پارامتر های مشابه با operand های این عملگر پیدا کنه یک کامپایل ارور صادر میکنه.
🔸️این فرایند برای core numeric تایپ هایی مثل (int32, int64, int16 و ...) که در FCL وجود دارند متفاوته و کامپایر در این تایپ ها مستقیما به دنبال خود operator می گرده و دستور معادل IL براشون تولید میکنه.
در آخر، براتون توی جدولی، متد خاص معادل هریک از operator ها، که کامپایلر در operand های عملگر بدنبال شون میگرده رو گذاشتم.
@fullStackDevs
BY Web Devs
Share with your friend now:
tgoop.com/fullStackDevs/738