توضیح کلاس‌های Static و اعضای static کلاس در #C
1398/01/21 17:50 , میلاد صاحب نظر

توضیح کلاس‌های Static و اعضای static کلاس در #C

کلاس‌های Static و اعضای Static کلاس برای بهبود عملکرد برنامه‌های NET. مورد استفاده قرار می‌گیرند.

کلیدواژه Static در زبان برنامه‌نویسی #C به شما اجازه می‌دهد کلاس‌های Static و اعضای Static تعریف کنید.

یک کلاس Static شبیه به یک کلاس است که هم چکیده و هم کاملاً بسته است. تفاوت بین کلاس Static و کلاس غیر Static این است که کلاس Static را نه می‌توان مقداردهی کرد و نه می‌توان از آن ارث‌بری کرد و اینکه همه اعضای کلاس نیز طبیعتاً Static هستند.

برای تعریف یک کلاس Static، باید آن را در هنگام تعریف، با کلیدواژه Static نشانه‌گذاری کنید.

در یک کلاس یا عضو Static هیچ رفتاری وجود ندارد، پس مسلماً ارث‌بری از چنین کلاسی اصلاً فایده ندارد. یک کلاس Static می‌تواند فقط اعضای Static داشته باشد – در یک کلاس Static نمی‌توانید اعضای نمونه یا instance (مثل متدها، متغیرها، propertyها و غیره) تعریف کنید.

در یک کلاس Static می‌توانید یک constructor یا سازنده Static داشته باشد، اما نمی‌توانید یک سازنده نمونه داشته باشید.

در #C چه موقع از یک کلاس Static استفاده می‌شود؟

چه موقع باید از یک کلاس Static استفاده کنید؟ معمولاً می‌توان کلاس‌های helper و utility را به عنوان کلاس‌های Static پیاده‌سازی می‌کنند، چون این کلاس‌ها نیاز به مقداردهی یا ارث‌بری ندارند و در کل شامل مجموعه‌ای از چند متد و property قابل استفاده مجدد می‌باشند. کد زیر ظاهر یک کلاس Static در #C را نمایش می‌دهد.

در #C چه موقع از متدهای Static استفاده می‌شود؟

متدهای Static متدهایی هستند که نیاز به فراخوانی شدن یک نمونه از کلاس ندارند – بلکه توسط خود کلاس فراخوانی می‌شوند. توجه کنید که متدهای Static فقط می‌توانند به اعضای Static کلاس دسترسی داشته باشند. می‌توانید درون یک کلاس Static یا غیر Static متدهای Static داشته باشید.

یک سازنده Static برای مقداردهی اعضای Static یک کلاس مورد استفاده قرار می‌گیرد. اولین دفعه‌ای که یک عضو Static کلاس مورد دسترسی قرار می‌گیرد، سازنده Static کلاس فراخوانی می‌شود.

چرا باید از متدهای Static استفاده کنیم؟ آن‌ها از نظر اجرا شدن، نسبت به متدهای غیر Static(مثل متدهای نمونه یا instance) کمی سریع‌تر هستند. دلیل این است که رانتایم از pointer یا اشاره‌گر this به عنوان یک پارامتر ضمنی برای متدهای غیر Static یا نمونه عبور می‌کند.

توجه کنید که برای یک متد غیر Static، کامپایلر دستور callvirt را حذف می‌کند، حتی اگر متد غیر مجازی باشد. اگر متدهای خود را Static کنید، کامپایلر محل‌های فراخوانی غیر مجازی را حذف می‌کند و نیاز به بررسی اینکه آیا instance یا نمونه null هست یا خیر را از بین می‌برد. این امر به شما سرعت و عملکرد بیشتر  و بهتری ارائه می‌دهد.

از این رو، اگر برنامه‌ای که در حال نوشتن هستید یک برنامه با نیاز شدید به سرعت و عملکرد خوب است، پس شاید بهتر باشد در کد خود از متدها و نوع‌های Static استفاده کنید. اگر در کد شما تعداد زیادی فراخوانی به چنین نوع‌ها و اعضایی وجود دارند، پس این مزیت عملکردی برای شما بسیار مفید و مطلوب خواهد بود.

کد زیر ظاهر یک متد Static را نمایش می‌دهد:

در #C چگونه می‌توان از اعضای Static یک کلاس استفاده کرد؟

CLR حافظه سیستم را به سه بخش مجزا تقسیم می‌کند: پشته، هیپ و high frequency heap. چون می‌توان بدون ایجاد نمونه از کلاس، مستقیماً به اشیاء Static دسترسی پیدا کرد، پس حتماً باید در طول چرخه عمر برنامه در حافظه وجود داشته باشند.

نیازی نیست که این اشیاء پاک‌سازی حافظه (garbage collected) شوند. از این رو، اشیاء Static  در high frequency heap ذخیره می‌شوند. معمولاً برای هر دامنه از برنامه، یک high frequency heap دارید.

حالا اجازه دهید اعضای Static یک کلاس را بررسی کنیم. دوباره می‌گوییم، شیء Static شیئی است که در کل زمان اجرای برنامه، در حافظه باقی می‌ماند. اگر مثال logging بالا را گسترش دهیم، کد زیر نشان می‌دهد که یک کلاس FileLogger با اعضای Static چگونه می‌باشد.

به نحوه استفاده از Static property به نام FilePath دقت کنید. برای اطمینان از امنیت نخ، کلیدواژه lock استفاده شده است. یک بررسی درون متد ()Log صورت گرفته است تا تائید کند که مقدار FilePath غیر null باشد و خالی نباشد.

به یاد داشته باشید، وقتی لازم است که سرعت برنامه سریع باشد، استفاده از متدهای Static بسیار مفید و منطقی است. می‌توانید از متدهای Static هم در کلاس‌های Static و هم در کلاس‌های غیر Static استفاده کنید.

منبع: infoworld

 مطالب مرتبط

 مقدمه ای بر زبان برنامه نویسی #C و پلتفرم NET Framework.
7 دلیل منطقی برای آموختن #C
 طبقه بندی زبان های برنامه نویسی
به دست آوردن Exceptionها در #C و یافتن همه خطاها
 LINQ(زبان جستجوی یکپارچه)
برنامه نویسی شیءگرا چیست؟

از آخرین دوره های آموزشی و تخفیف ها مطلع شوید

با تکمیل فرم زیر ، از اخبار و اطلاعات به روز برنامه نویسی و تکنولوژی عقب نمانید

آخرین مطالب

آموزش جامع SQL Server (جلسه ۱۲)
آموزش جامع SQL Server (جلسه ۱۲)

دستور UPDATE در SQL Server برای تغییر داده‌های موجود در یک جدول، از دستور UPDATE به شکل زیر استفاده ...

آموزش جامع SQL Server (جلسه ۱۵)
آموزش جامع SQL Server (جلسه ۱۵)

دستور DROP TABLE در SQL Server گاهی، لازم است یک جدول که دیگر استفاده‌ای ندارد را حذف کنید. برای ...

آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)
آموزش جامع SQL Server (جلسه ۳۵: Window Functionها – بخش ۲)

بخش اول از آخرین مبحث دوره جامع آموزش SQL Server در جلسه قبلی بررسی شد. این مبحث که ...

آخرین دیدگاه ها

دیدگاه خود را درباره این پست بنویسید

فرم ارسال نظرات