اعضای static، Constant ها و متدهای Extension
شناسه پست: 2116
بازدید: 978

در این مقاله، ما قصد داریم در مورد اعضای static در #c صحبت کنیم و اینکه چه زمانی و چرا باید از آنها استفاده کنیم.

این مقاله، سرفصلی از دوره آموزشی زیر میباشد:

اگر می خواهید محتویات کامل این دوره را ببینید ، می توانید بر روی لینک سطح متوسطه #C کلیک کنید.

برای دانلود سورس، بر روی لینک سورس اعضای static در #c کلیک کنید.

ما میخواهیم این مقاله را به قسمتهای زیر تقسیم کنیم:

متدهای Static

زمانیکه ما یک متد را در یک کلاس تعریف می کنیم ، آن متد متعلق به آن کلاس میشود و هر نمونه ایجاد شده از آن کلاس، میتواند به آن متد دسترسی داشته باشد. یک کلاس میتواند متدهای خیلی زیادی داشته باشد. اما تعدادی متد وجود دارد که مستقل از آن نمونه کلاس مورد نظر هستند. این نمونه از متدها، “متدهای static” نام دارند. بنابراین متدهای static، متدهایی هستند که به یک نمونه از یک کلاس تعلق ندارند و میتوانند فقط با عناصر static دیگر تعامل برقرار کنند و کلمه کلیدی static را در تعریف متد داشته باشند.

اجازه بدید متد ()Sqrt را به عنوان مثال داشته باشیم. این متد، جذر یک عدد را محاسبه میکند و ما نیازی نیست کلاس Math را نمونه سازی کنیم (که متد Sqrt به آن تعلق دارد). زیرا این متد، یک متد  static است:

بنابراین، چرا متد Sqrt یک متد static است و غیر static نیست؟

خب، Sqrt فقط یک آرگومان میپذیرد و آن برای اینکه این متد کارش را انجام دهد کافی است. ما یک آرگومان عددی به متد میدهیم و آن جذر آن عدد را برمیگرداند. ما اصلا از کلاس Math نمونه ای نساختیم. به این دلیل که نیازی به این کار نیست. کلاس Math هیچ حمایتی بر روی متد Sqrt برای انجام دادن کارش ارائه نمیدهد. بلکه این کلاس فقط یک فضا برای مستقر شدن متد Sqrt فراهم میکند.

زمانیکه ما موردی مثل همین مورد ذکر شده داریم، ایجاد یک متد static معمولا راهکار خوبی میباشد.

کار با یک متد static

برای صدا زدن یک متد static، همانطور که گفتیم، نیازی به ایجاد نمونه از آن کلاس نیست. بلکه میتوانیم آن را با سینتکس زیر صدا بزنیم:

بنابرین وقتیکه ما از متد Sqrt یا هر متد دیگری از کلاس Math استفاده میکنیم، آنگاه میتوانیم به این صورت آن را فراخوانی کنیم: Math.Sqrt(16).

ایجاد یک فیلد با استفاده از کلمه کلیدی Const

اگر ما فیلدمان را با پیشوند کلمه const ایجاد کنیم، میتوانیم فیلدی را تعریف کنیم که مقدار آن هرگز تغییر نکند. کلمه const کوتاه شده کلمه constant است. یک عضو constant در زمان کامپایل تعریف میشود و در زمان اجرا نمیتواند تغییر کند.

ما میتوانیم به روش زیر، یک متغیر const ایجاد کنیم: AccessModifier const Type Name = Value;

Constant ها در #c

کلاس Static

در #c، در کنار متدهای استاتیک می توان کلاسهای استاتیک را نیز تعریف کرد. کلاس static میتواند فقط شامل اعضای static باشد. هدف آن این است که به عنوان یک نگهدارنده برای متدها و فیلدهای پرکاربرد عمل کند. نمونه سازی این نوع از کلاسها با کلمه new، هیچ دلیلی ندارد. علاوه بر این، ما نمیتوانیم اصلا این کار را انجام دهیم. اما ما می توانیم یک سازنده پیش فرض ایجاد کنیم به شرطی که آن یک سازنده static باشد. هر نوع دیگری از سازنده غیرقانونی است:

متدهای Extension و نحوه استفاده از آنها

فرض کنید می خواهیم یک ویژگی جدید به نوع string اضافه کنیم. برای مثال، قابلیت FirstLetterUpperCase که اولین حرف یک رشته را به حرف بزرگ تبدیل میکند. برای این منظور، ما میتوانیم یک متد معمولی بنویسیم:

اما همانطور که اینجا میبینید ما باید همیشه یک کلمه را به عنوان یک پارامتر بفرستیم و مقدار بازگشتی را تحویل بگیریم. این یک رویکرد اشتباه نیست اما ما میتوانیم این کار را بهتر نیز انجام دهیم. اینجاست که متدهای extension به روی کار می آیند.

یک متد extension ما را قادر میسازد تا یک type موجود را با متدهای static اضافی توسعه دهیم. ما باید این نوع از متدها را داخل یک کلاس static ایجاد کنیم و این متدها، قبل از اولین پارامترشان، کلمه کلیدی this به عنوان پیشوند قرار میگرد.

اما چرا ما باید یک پیشوند قبل از اولین پارامتر قرار دهیم؟

زیرا این پارامتر، شاخصی است که به کامپایلر می گوید که در حال توسعه کدام type هستیم.

پس مثال قبلی را یکبار دیگر مینویسیم اما اینبار با متد extension:

متد Extension در #c

بسیار عالی.

نتیجه گیری

ما کار خود را با اعضای static تمام کردیم و اکنون یک ابزار عالی در جعبه ابزار خود داریم که می توانیم هنگام توسعه برنامه های #C خود از آن استفاده کنیم.

در این مقاله، ما یاد گرفتیم:

  • نحوه استفاده از کلاسهای static
  • شیوه استفاده از متدهای static
  • نحوه ایجاد متدهای extension
  • در مورد کلمه کلیدی const و ایجاد constant ها

در مقاله بعدی، در مورد  Anonymous Type ها و Nullable Type ها در #C صحبت میکنیم.

نویسنده

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