scope یا محدوده متغیر در زبان سی شارپ
در هر زبان برنامه نویسی اجزای برنامه دارای یک سطح و محدوده دسترسی و همچنین طول عمر می باشند. در زبان #C نیز برای هر متغیر یک بازه یا scope و همچنین طول عمر یا lifetime تعریف شده است. در سی شارپ، scope متغیر، میزان دسترسی متغیر به بخش خاصی از برنامه را تعیین می کند. متغیرها را می توان در کلاس، متد و بلوک کد یک حلقه، شرط و غیره اعلام کرد.
سه نوع اسکوپ در سی شارپ وجود دارد.
1- محدوده سطح کلاس
2- محدوده سطح متد
3- محدوده سطح بلوک کد
محدوده سطح کلاس (Class Level Scope)
متغیر اعلام شده در یک کلاس به عنوان یک فیلد شناخته می شود. این نوع متغیر دارای یک محدوده سطح کلاس است که می تواند در هر نقطه از کلاس مانند متدهای کلاس، properties و غیره قابل دسترسی باشد.
در مثال بالا، کلاس Student شامل دو متغیر کلاس (a.k.a. fields) به نام های _firstName و _lastName است. این فیلدها در هر نقطه ای از کلاس قابل دسترسی هستند، یعنی در هر متد و property غیر ایستاتیک.
متغیرهای سطح کلاس نیز می توانند خارج از کلاس با استفاده از اشیاء کلاس بسته به تعیین کننده های سطح دسترسی، دسترسی پیدا کنند. متغیرهای نوع استاتیک کلاس فقط از طریق متدها یا property های استاتیک قابل دسترسی هستند.
محدوده سطح متد (Method Level Scope)
متغیری که در یک متد اعلام شده است دارای محدوده سطح متد است. این نوع متغیر همچنین به عنوان متغیر محلی متدی که در آن اعلان شده است، شناخته می شود و خارج از متد قابل دسترسی نیست.
هر بلوک کد تودرتو در متد می تواند به این نوع متغیر دسترسی داشته باشد. نمی توان آن را دو بار با یک نام در یک محدوده اعلام کرد.
دامنه متغیر محلی با اتمام اجرای متد به پایان می رسد.
مثال زیر محدوده سطح متد را نشان می دهد:
در مثال بالا، متد ()Main فقط می تواند به متغیرهای اعلام شده در متد ()Main دسترسی داشته باشد اما به متغیرهای متدهای دیگر دسترسی ندارد. به همین ترتیب، متد ()Process نمی تواند به متغیرهای اعلام شده در ()Main یا هر متد دیگری دسترسی داشته باشد.
محدوده سطح بلوک کد (Code-Block Level Scope)
متغیری که در یک حلقه یا هر بلوکی در داخل پرانتز اعلام شده است، محدوده سطح بلوک کد را دارد. متغیری که در یک حلقه یا بلوک کد اعلام شده است خارج از آن قابل دسترسی نیست، در حالی که متغیری که خارج از حلقه اعلام شده است می تواند در داخل حلقه قابل دسترسی باشد.
در مثال بالا، یک متغیر i در یک حلقه for اعلام شد. بنابراین، فقط در بلوک حلقه for قابل دسترسی است و در خارج از حلقه نمی توان به آن دسترسی داشت. به همین ترتیب، x در بلوک if اعلام می شود، بنابراین فقط در آن بلوک قابل دسترسی است اما خارج از آن دسترسی امکان پذیر نیست.
یک متغیر باید خارج از بلوک کد اعلام شود تا برای کدهای خارجی قابل دسترسی باشد.