در سی شارپ «Static» به چیزی میگویند که امکان ساخت نمونه از روی آن وجود ندارد. برای مثال، برنامه نویسان نمیتوانند از روی کلاسهای Static شیء ایجاد کنند. همچنین نمیتوان با استفاده از اشیا به اعضای Static دسترسی داشت. در زبانهای برنامه نویسی شیءگرا مانند سی شارپ، بعضی از اوقات، درک کلمهای مانند Static برای توسعهدهندگان سخت میشود. کلمه Static روش کار اشیای مختلف را تغییر میدهد. از کلمه Static برای متدها، فیلدها، صفات، رویدادها و کلاسهای سی شارپ استفاده میشود. تعریف این مفاهیم به شکل Static روش کار آنها را عوض میکند. به همین دلیل توسعهدهندگان سی شارپ باید با این مفهوم آشنا باشند.
آنچه در این مطلب میآموزید:
-
در این مطلب با کلاسهای Static در سی شارپ آشنا میشوید.
-
تعریف کلاس Static را کامل یاد میگیرید و با قوانین مربوط به آن آشنا میشوید.
-
روش تعریف و استفاده اعضای Static در کلاسهای غیر Static را یاد میگیرید.
-
قوانین مربوط به استفاده از متدهای Static را میآموزید.
-
با قوانین مربوط به سازندههای Static در سی شارپ آشنا میشوید.

در این مطلب از مجله فرادرس درباره مفهوم Static در سی شارپ و تاثیر آن در شیءگرایی بحث کردهایم. بعد از معرفی Static، با کمک مثالهای کدنویسی شده، روش استفاده از این مفهوم را در کلاسهای Static و اعضای Static نیز بررسی کردیم.
Static در سی شارپ چیست؟
از Static در سی شارپ برای ساخت اعضایی استفاده میشود که فقط به کلاس تعلق دارند. تمام کلاسها، متغیرها، متدها، صفات، عملگرها، رویدادها و «سازندهها» (Constructors) در سی شارپ میتوانند به عنوان Static تعریف شوند. برای این کار باید از کلمه کلیدی static استفاده کنیم.
اعضای Static به هیچ کدام از نمونههای ساخته شده از روی کلاس تعلق ندارند. این اعضا بین تمام اشیای ساخته شده از آن کلاس به اشتراک گذاشته میشوند. میدانیم که از اعضای معمولی کلاس، یک نمونه منحصر به فرد برای هر کدام از اشیا آن کلاس ساخته میشود. اما در مورد اعضای Static این اتفاق نمیافتد. نکته بعدی اینجاست که وقتی عضوی در کلاس به صورت Static ایجاد شد، بدون نیاز به ساخت نمونه و فقط با کمک نام کلاس میتوان به آن عضو دسترسی داشت.
کلاس Static
در فهرست زیر، چند مورد از مهمترین اصول مربوط به تعریف کلاسهای استاتیک را نوشتهایم.
- برای تعریف کردن کلاسها به شکل Static باید از کلمه کلیدی static قبل از کلمه کلیدی سازنده class استفاده کنیم.
- کلمه Static باید بعد از کلمه سازنده دسترسی نوشته شود. یعنی دقیقا بین «مشخص کننده سطح دسترسی، و کلمه کلیدی class.
- در آخر هم که نام کلاس را مینویسیم.

کد زیر، کلاسی را از نوع static تعریف میکند. این کلاس دارای صفات و متدهای Static است.
کلاس Calculator در بالا static است. تمام اعضای درون کلاس هم به شکل static تعریف شدهاند.

از روی کلاسهای Static نمیتوان شیء ایجاد کرد. بنابراین فقط با استفاده از نام کلاس و به صورت مستقیم، میتوان از اعضای درون کلاس Static استفاده کرد. در واقع، کد مورد نیاز برای دسترسی به اعضای استاتیک کلاس به شکل ClassName.MemberName نوشته میشود. در کادر زیر، کد مربوط به استفاده از اعضای کلاس Static نوشته شده است.
قوانین مربوط به کلاس Static
در این بخش از مطلب، مهمترین قوانین مربوط به کلاس Static را نوشتهایم. این قوانین هستند که بین کلاس Static و سایر کلاسهای معمولی تفاوت ایجاد میکنند.
- از روی کلاسهای Static نمیتوانیم نمونه شیء بسازیم.
- تمام اعضای درون کلاس Static هم باید از نوع Static باشند. در غیر این صورت کامپایلر سی شارپ پیغام خطا برمیگرداند.
- کلاسهای Static میتوانند شامل متغیر، متد، «صفات» (Properties)، عملگر، رویداد، و سازنده باشند. اما به شرطی که همه آنها به شکل Static تعریف شوند.
- کلاسهای Static نمیتوانند دارای اعضا و سازندههای نمونه باشند.
- «اندیسگذارها» (Indexers) و «مخربها» (Destructors) نمیتوانند از نوع Static باشند.
- برای تعریف کردن اعضای Static نمیتوانیم از کلمه کلیدی var استفاده کنیم. همیشه باید نوع عضو را به شکل صریح و بعد از کلمه کلیدی static مشخص کنیم.
- کلاسهای «Sealed» حالت مهروموم شده دارند. یعنی اینکه هیچ کلاسی نمیتواند از آنها ارث بری کند.
- قوانین مربوط به ارث بری در سی شارپ بر روی کلاسهای Static اعمال نمیشود. یعنی اینکه این کلاسها هم نمیتوانند از کلاس دیگری ارثبری کنند.
- اعضای درون کلاس Static فقط با استفاده از سینتکس MemberName قابل دسترسی هستند.
- کلاس Static تا وقتی در حافظه باقی میماند که اپلیکیشن طراحی شده در نرمافزار به کار خود ادامه دهد.
چگونه از فرادرس برای یاد گرفتن سی شارپ استفاده کنیم؟
فرادرس مجموعهای از فیلمهای آموزشی متنوع را برای این زبان تهیه کرده است. در این مجموعه فیلم، از ابتداییترین مفاهیم سی شارپ مانند سینتکس گرفته تا مفاهیم پیچیده و پیشرفتهای مانند شیءگرایی آموزش داده شدهاند. در نتیجه، همه توسعهدهندگان مبتدی و حرفهای #C با مراجعه به سایت فرادرس میتوانند فیلمهای مناسب خود را پیدا کنند. مشاهده این فیلمها و تمرین منظم و دقیق، همراه با آنها تاثیر زیادی در پیشرفت مهارتهای برنامه نویسان دارد. زبان برنامهنویسی سی شارپ میتواند با هدف توسعه نرمافزارهای متنوعی مانند برنامههای دسکتاپ، برنامههای تحت وب، اپلیکیشنهای موبایل و بازیهای کامپیوتری به کار برده شود.

یکی از دلایل محبوبیت زبان سی شارپ این است که کسب مهارت در این زبان، موقعیتهای شغلی متنوعی را در مقابل افراد قرار میدهد. بنابراین افراد زیادی به دنبال پیدا کردن منابع مورد اعتماد و با کیفیت برای یادگیری سی شارپ هستند. در پایین، چند مورد از فیلمهای آموزشی تولید شده توسط فرادرس را معرفی کردهایم. در صورت تمایل بر روی تصویر بالا کلیک کرده و باقی فیلمهای مجموعه آموزش سی شارپ را نیز بررسی کنید.
در ادامه مطلب به بررسی کلاسهای غیر Static و اعضای Static درون این کلاسها پرداختهایم.
اعضای Static در کلاسهای غیر Static
کلاسهای معمولی – کلاسهای غیر Static – میتوانند شامل یک یا چند متغیر، متد، «صفت» (Properties)، عملگر، رویداد Static و سایر اعضای غیر Static باشند. کاربردیترین حالت این است که کلاسهای غیر Static را همراه با چند عضو Static بسازیم، نه اینکه کل کلاس را به صورت کامل از نوع Static تعریف کنیم.
لازمه تسلط بر مفهوم Static در سی شارپ این است که با اصول شیءگرایی در این زبان آشنا شده و مفاهیم مربوط به آن را درک کنیم. به این منظور پیشنهاد میکنیم که فیلم آموزش شی گرایی در سی شارپ از فرادرس را مشاهده کنید. برای کمک به مخاطبان مجله، لینک این فیلم را در پایین نیز قرار دادهایم.
فیلدهای Static
در کلاسهای غیر Static هم میتوانیم فیلدهای Static داشته باشیم. به این منظور فقط کافیست قبل از تعریف فیلد از کلمه کلیدی Static استفاده کنیم. فیلدهای Static بین تمام نمونههای ساخته شده از روی کلاس به اشتراک گذاشته میشوند. بنابراین در صورتی که در یکی از اشیاء تعریف شده از کلاس، مقدار فیلد Static را تغییر دهیم، بر روی دیگر اشیا کلاس مورد نظر هم اثر میگذارد.
متدهای Static
در کلاسهای غیر Static میتوانیم یک یا چند متد Static تعریف کنیم. بدون ساختن شیء هم میتوانیم متدهای Static را فراخوانی کنیم. اما با استفاده از اشیا ساخته شده از روی کلاسهای غیر Static نمیتوان متدهای Static را فراخوانی کرد. برای درک بهتر کلاسهای Static و کلاسهای غیر Static، باید با تکنولوژی شی گرایی در سی شارپ آشنا باشید. به این منظور پیشنهاد میکنیم که مطلب مربوط به آن را در مجله فرادرس مطالعه کنید.

متدهای Static فقط میتوانند سایر متدهای Static را فراخوانی کنند. در واقع این متدها فقط امکان دسترسی به اعضای Static کلاس را دارند. در متدهای Static نمیتوانیم به اعضای غیر Static کلاس دسترسی داشته باشیم.
قوانین مربوط به استفاده از متدهای Static
در زمان استفاده از متدهای Static لازم است که به چند نکته مهم توجه کنیم. این نکات را در فهرست زیر جمعآوری کردهایم.
- برای تعریف کردن متدهای Static باید از کلمه کلیدی static قبل از نام نوع برگشتی و بعد از مشخص کننده دسترسی استفاده کنیم. برای مثال در خط static void Display(string text) کلمه کلیدی void نوع برگشتی است. در این تابع هیچ «مشخص کننده سطح دسترسی» تعریف نشده است.
- متدهای Static را میتوانیم «بازنویسی» (Overloaded) کنیم. اما این متدها را نمیتوان «سربارگذاری» (Overridden) کرد.
- متدهای Static میتوانند شامل متغیرهای Static محلی باشند.
- متدهای Static نمیتوانند به متغیرهای غیر Static دسترسی داشته باشند و آنها را فراخوانی کنند. مگر اینکه آنها را به شکل صریح به عنوان پارامتر به متد ارسال کنیم.
یادگیری پیاده سازی پروژه در سی شارپ با کمک فرادرس
فرادرس برای کمک به توسعهدهندگان، فیلمهایی را تولید کرده است که روش پیادهسازی و اجرای پروژههای مختلفی را نشان میدهند. در این فیلمها پروژههای نزدیک به دنیای واقعی مطرح شده و بعد از بیان توضیحات، پروژه توسط اساتید حرفهای و به شکل گام به گام پیادهسازی میشود. چند مجموعه مختلف درباره فیلمهای پروژهمحور در فرادرس تولید شدهاند. یکی از این مجموعهها مربوط به آموزش اجرای پروژههای زبان برنامه نویسی سی شارپ است. زبان برنامه نویسی C# کاربردهای متنوعی دارد. در نتیجه میتوان پروژههای مختلفی برای آن تعریف کرد. در پایین چند مورد از فیلمهای آموزش پروژهمحور سی شارپ را معرفی کردهایم.
برای دیدن سایر فیلمها بر روی تصویر زیر کلیک کرده و به صفحه اصلی این مجموعه آموزشی هدایت شوید.

سازندههای Static
کلاسهای غیر Static میتوانند شامل سازندههای Static باشند. به شرطی که این «سازندهها» (Constructors) بدون پارامتر باشند. برای تعریف «سازندههای Static» یا (Static Constructors) باید از کلمه کلیدی static استفاده کرد. اما نباید از «مشخصکنندههای دسترسی» (Access Modifiers) مانند public و private و protected استفاده کرد.
در مثال زیر، تفاوت بین سازندههای Static و «سازندههای نمونه» (Instance Constructor) بررسی شده است.
در بالا، کلاس غیر Static به نام StopWatch ساختهایم. این کلاس شامل یک سازنده از نوع Static و یک سازنده غیر Static است. هر وقت که متد Static برای اولین بار استفاده شده یا نمونهای از کلاس ساخته شود، سازنده از نوع Static فقط یک بار فراخوانی میشود. در مثال زیر، سازنده Static هم زمان با اولین فراخوانی متد Static فراخوانی میشود. اما فراخوانی متد Static برای بار دوم به بعد سازندههای Static را فراخوانی نمیکند.
بعد از اجرای کد بالا، خروجی زیر تولید شده و در کنسول سی شارپ نمایش داده میشود.
Static constructor called. DisplayInfo called DisplayInfo called
مثال زیر، نشان میدهد که سازندههای Static هم زمان با ساختن اولین نمونه از کلاس، فراخوانی میشوند. این نکته یکی از ویژگیهای Static در سی شارپ است.
بعد از اجرای کد بالا، خروجی زیر تولید شده و در کنسول سی شارپ نمایش داده میشود.
Static constructor called instance constructor called instance constructor called DisplayInfo called
قوانین مربوط به سازندههای Static در سی شارپ
در این بخش از مطلب، نکات و قوانین مهمی را نوشتهایم. در زمان استفاده از سازندههای Static باید این اصول را بخاطر داشته باشیم.
- با استفاده از کلمه کلیدی static میتوانیم سازندههای Static را تعریف کنیم. اما برای تعریف این نوع از سازندهها نباید از مشخصکنندههای دسترسی مانند public یا private یا protected استفاده کرد.
- کلاسهای غیر Static میتوانند شامل سازندههای Static بدون پارامتر باشند. امکان استفاده از سازندههای Static دارای پارامتر در این نوع از کلاسها وجود ندارد.
- سازندههای Static فقط یک بار در طول عمر کلاس اجرا میشوند. یعنی اینکه اگر کلاسی تعریف کردیم. این کلاس هم چندین بار مختلف در بخشهای مختلف اپلیکیشن استفاده شد. سازنده Static همچنان فقط یک بار اجرا خواهد شد. ما به عنوان توسعهدهنده برنامه نمیتوانیم تعیین کنیم که سازنده Static در چه زمانی اجرا شود.
- سازندههای Static فقط میتوانند به اعضای Static دسترسی داشته باشند. این نوع از سازندهها اجازه دسترسی به اعضای نمونه را ندارند. همچنین درون سازندههای Static نمیتوان اعضای غیر Static تعریف کرد.
نکته: اعضای Static در محل خاصی از حافظه ذخیره میشوند. به این محل «هیپ با فرانکس بالا» (High-Frequency Heap) گفته میشود.
جمعبندی
اعضای Static در سی شارپ، به توسعهدهندگان برای ساخت دادهها یا رفتارهای اشتراکی کمک میکنند. بدون نیاز به ساختن شیء از روی کلاسها هم میتوانیم از اعضای Static استفاده کنیم. اما به عنوان توسعهدهنده باید نسبت به استفاده از این ابزار احتیاط کنیم. فقط وقتی Static استفاده میکنیم که به دادههای مشترک یا رفتارهای اشتراکی در زمان کار با نمونههای مختلف نیاز باشد. وقتی از اعضای Static در سی شارپ استفاده میکنیم با دقت باید به امنیت اجرای فرایندها یا نخها، تغییر دادن دادهها و قوانین نامگذاری عناصر توجه کنیم.
در این مطلب از مجله فرادرس با مفهوم Static در سی شارپ آشنا شدیم. با استفاده درست از Static و درک روش کار آن توسعهدهندگان میتوانند از ویژگیهای مهم این مفهوم به خوبی استفاده کنند. این مسئله برای نوشتن کدهای سریع با قابلیت مدیریت آسان به برنامه نویسان کمک میکند.

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