فصل 20 از 40 درس 1 از 1

اعضای Static

اعضای Static

بخشی از آموزش جامع C# و .NET 10

محتوای درس اعضای Static

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

۱. Static Field و Property

این اعضا میان تمام نمونه‌ها مشترک‌اند و Lifetime آن‌ها معمولاً با AppDomain یا فرآیند مرتبط است.

مثال

class Counter { private int _count; public void Inc()=>_count++; }

در این مثال، مفهوم «Static Field و Property» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. Static Method

متد static بدون نمونه Class فراخوانی می‌شود و مستقیم به اعضای Instance دسترسی ندارد.

مثال

class Calculator { public int Add(int a,int b)=>a+b; }
         Console.WriteLine(new Calculator().Add(2,3));

در این مثال، مفهوم «Static Method» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. Static Class

Static Class نمی‌تواند نمونه‌سازی یا ارث‌بری شود و تمام اعضای آن static هستند.

مثال

static class AppInfo{public static string Name=>"Store";}

در این مثال، مفهوم «Static Class» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Static Constructor

برای مقداردهی یک‌باره وضعیت static استفاده می‌شود و CLR زمان اجرای آن را مدیریت می‌کند.

مثال

class Settings{public static string Mode{get;} static Settings()=>Mode="Prod";}

در این مثال، مفهوم «Static Constructor» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. محدودیت‌ها

Global State قابل تغییر در اعضای static می‌تواند تست و همزمانی را دشوار کند.

مثال

static class Counter { private static int _x; public static int Next()=>Interlocked.Increment(ref _x); }

در این مثال، مفهوم «محدودیت‌ها» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. مثال‌های عملی

public static class PriceCalculator
         {
             public static decimal ApplyTax(decimal price, decimal rate)
                 => price + (price * rate);
         }
         
         decimal finalPrice = PriceCalculator.ApplyTax(100m, 0.1m);

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۷. خطاهای رایج

• تبدیل Serviceهای دارای وابستگی و State به Static Class

• نگهداری State عمومی قابل تغییر به‌صورت static

• استفاده از static فقط برای جلوگیری از ساخت Object بدون تحلیل طراحی

۸. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۹. تمرین عملی

یک Static Class برای تبدیل واحدهای طول ایجاد کنید و متدهای MeterToCentimeter و KilometerToMeter را پیاده‌سازی کنید.

۱۰. جمع‌بندی

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