در این مقاله، از سری مقالات آموزشی پی استور به بررسی انواع متغیر در سی شارپ «#Types of Variables in C» و تفاوتها و کاربردهای هر کدام خواهیم پرداخت، بهویژه تمرکز ما بر روی متغیرهای ثابت «Const» و فقطخواندنی «Readonly» خواهد بود که ویژگیها و نحوه «Syntax» استفاده از آنها در برنامهها را توضیح خواهیم داد.
یک متغیر «Variable»، نامی است که به یک مکان حافظه اختصاص داده میشود و تمام عملیات انجامشده روی متغیر، بر آن مکان حافظه تأثیر میگذارد. در زبان سی شارپ #C، تمام متغیرها باید قبل از استفاده تعریف شوند. متغیر، واحد پایهای ذخیرهسازی در یک برنامه است. مقدار ذخیرهشده در یک متغیر میتواند در طول اجرای برنامه تغییر کند.
مقدمه
در دنیای برنامهنویسی، متغیرها نقش اساسی در ذخیرهسازی «Storaging» و پردازش «Processing» دادهها دارند. در زبانهای برنامهنویسی شیءگرا مانند #C، متغیرها انواع مختلفی دارند که هرکدام ویژگیها و کاربردهای خاص خود را دارند. از جمله این انواع میتوان به متغیرهای محلی، نمونه، استاتیک، ثابت و فقطخواندنی اشاره کرد که به تفصیل در مورد هر کدام از آنها صحبت خواهیم کرد. هر یک از این متغیرها ویژگیهایی دارند که رفتار آنها را در زمان اجرای برنامه تحت تأثیر قرار میدهد.
متغیرهای ثابت و فقطخواندنی از جمله مفاهیمی هستند که برای جلوگیری از تغییر مقادیر دادهها پس از مقداردهی اولیه در برنامهها استفاده میشوند. این ویژگیها به برنامهنویس این امکان را میدهند تا کنترل بیشتری بر روی دادههای برنامه داشته باشند و از بروز اشتباهات ناشی از تغییرات ناخواسته جلوگیری کنند.
انواع متغیر در سی شارپ
در زبان برنامهنویسی سیشارپ، متغیرها انواع مختلفی دارند که هرکدام ویژگیها و کاربردهای خاص خود را دارا هستند. انواع متغیرها عبارتند از:
- متغیرهای محلی «Local variables»
- متغیرهای نمونه یا غیر استاتیک «Instance variables or Non – Static Variables»
- متغیرهای استاتیک یا کلاسی «Static Variables or Class Variables»
- متغیرهای ثابت «Constant Variables»
- متغیرهای فقطخواندنی «Readonly Variables»
در ادامه، ویژگیهای هر نوع متغیر توضیح داده شده و برای هرکدام مثالی آوردهایم تا شما بتوانید تفاوتها و ویژگیهای هر کدام از آنها را بهتر درک کنید. برای اینکه برنامه نویسی زبان سی شارپ را بهتر یاد بگیرید میتوانید هر کدام از مثالها را در محیط برنامه نویسی آنلاین پی استور Pstore Online Compiler بنویسید و اجرا کنید.
اگر میخواهید مفاهیم بیشتری از برنامهنویسی سیشارپ همچون حلقهها، شرطها و توابع را یاد بگیرید، میتوانید از دوره آموزش برنامه نویسی سیشارپ موجود در مجموعه آموزشی پی استور استفاده کنید.
متغیر محلی در سی شارپ
متغیرهای محلی یکی از انواع متغیر در سی شارپ هستند که در داخل یک متد، سازنده، یا بلوک کد تعریف میشوند.
این متغیرها دامنه محدودی دارند و تنها در داخل بلوکی که در آنها تعریف شدهاند قابل دسترسی هستند. در واقع این متغیرها زمانی ایجاد میشوند که بلوک وارد شده یا تابع فراخوانی شود و پس از خروج از بلوک یا بازگشت از تابع نابود میشوند.
متغیرهای محلی باید قبل از استفاده مقداردهی شوند و معمولاً برای ذخیرهسازی موقت دادهها در یک برنامه به کار میروند. دامنه این متغیرها فقط درون بلوکی است که متغیر در آن تعریف شده است؛ به عبارت دیگر، تنها در همان بلوک میتوان به این متغیرها دسترسی داشت.
مثال ۱
// C# program to demonstrate // the local variables using System; class StudentDetails { // Method public void StudentAge() { // local variable age int age = 0; age = age + 10; Console.WriteLine("Student age is : " + age); } // Main Method public static void Main(String[] args) { // Creating object StudentDetails obj = new StudentDetails(); // calling the function obj.StudentAge(); } }
Student age is : 10
توضیح: در برنامهی بالا، متغیر age یک متغیر محلی برای تابع ()StudentAge است. اگر بخواهیم از متغیر age خارج از تابع ()StudentAge استفاده کنیم، کامپایلر خطا تولید میکند، همانطور که در برنامهی زیر نشان داده شده است.
مثال ۲
// C# program to demonstrate the error // due to using the local variable // outside its scope using System; class StudentDetails { // Method public void StudentAge() { // local variable age int age = 0; age = age + 10; } // Main Method public static void Main(String[] args) { // using local variable age outside it's scope Console.WriteLine("Student age is : " + age); } }
خطا:
prog.cs(22,43): error CS0103: The name `age’ does not exist in the current context
متغیر غیر استاتیک در سی شارپ
متغیرهای نمونه، که متغیرهای غیر استاتیک نیز نامیده میشوند، در داخل یک کلاس ولی خارج از هر متد، سازنده یا بلوک تعریف میشوند. این متغیرها ویژگیها یا خصوصیات اشیاء ایجاد شده از آن کلاس را نمایان میکنند.
از آنجا که این متغیرها در کلاس تعریف میشوند، هنگامی که یک شیء از کلاس ایجاد میشود، این متغیرها ساخته میشوند و زمانی که شیء از بین میرود، این متغیرها نیز از بین میروند. برخلاف متغیرهای محلی، برای متغیرهای نمونه میتوان از مشخصکنندههای دسترسی (Access Specifiers) استفاده کرد.
مثال
// C# program to illustrate the // Instance variables using System; class Marks { // These variables are instance variables. // These variables are in a class and // are not inside any function int engMarks; int mathsMarks; int phyMarks; // Main Method public static void Main(String[] args) { // first object Marks obj1 = new Marks(); obj1.engMarks = 90; obj1.mathsMarks = 80; obj1.phyMarks = 93; // second object Marks obj2 = new Marks(); obj2.engMarks = 95; obj2.mathsMarks = 70; obj2.phyMarks = 90; // displaying marks for first object Console.WriteLine("Marks for first object:"); Console.WriteLine(obj1.engMarks); Console.WriteLine(obj1.mathsMarks); Console.WriteLine(obj1.phyMarks); // displaying marks for second object Console.WriteLine("Marks for second object:"); Console.WriteLine(obj2.engMarks); Console.WriteLine(obj2.mathsMarks); Console.WriteLine(obj2.phyMarks); } }
خروجی
Marks for first object: ۹۰ ۸۰ ۹۳ Marks for second object: ۹۵ ۷۰ ۹۰
توضیح: در برنامهی بالا، متغیرهای engMarks، mathsMarks و phyMarks متغیرهای نمونه هستند. اگر همانطور که در برنامه نشان داده شده است، چندین شیء وجود داشته باشد، هر شیء نسخههای جداگانهای از متغیرهای نمونه خواهد داشت. از خروجی مشخص است که هر شیء نسخهی مخصوص به خود از متغیرهای نمونه دارد.
متغیر استاتیک در سی شارپ
متغیرهای استاتیک که بهعنوان متغیرهای کلاسی نیز شناخته میشوند، متغیرهایی هستند که صریحاً با استفاده از کلمه کلیدی static تعریف میشوند یا اگر یک متغیر در یک بلوک استاتیک تعریف شود، آن متغیر بهعنوان متغیر استاتیک شناخته میشود.
این متغیرها بین تمامی نمونههای کلاس مشترک هستند و مقادیر آنها در طول اجرای برنامه حفظ میشود. متغیرهای استاتیک یک مکان ذخیرهسازی مشترک برای تمام اشیاء آن کلاس فراهم میکنند.
این متغیرها مشابه متغیرهای نمونه تعریف میشوند، اما تفاوت این است که متغیرهای استاتیک با استفاده از کلمه کلیدی static در داخل یک کلاس و خارج از هر متد، سازنده، یا بلوک تعریف میشوند. برخلاف متغیرهای نمونه، تنها یک نسخه از متغیر استاتیک برای هر کلاس وجود دارد، صرفنظر از اینکه چند شیء از آن کلاس ایجاد شود. متغیرهای استاتیک در ابتدای اجرای برنامه ایجاد میشوند و بهطور خودکار هنگام پایان اجرای برنامه از بین میروند.
نکته: برای دسترسی به متغیرهای استاتیک نیازی به ایجاد شیء از کلاس نیست؛ میتوان مستقیماً به متغیر دسترسی داشت، به این صورت:
class_name.variable_name;
مثال
// C# program to illustrate // the static variables using System; class Emp { // static variable salary static double salary; static String name = "Aks"; // Main Method public static void Main(String[] args) { // accessing static variable // without object Emp.salary = 100000; Console.WriteLine(Emp.name + "'s average salary:" + Emp.salary); } }
خروجی
taha's average salary:100000
نکته: مقداردهی اولیه متغیرهای غیر استاتیک با ایجاد نمونه (شیء) و فراخوانی سازنده مرتبط است، بنابراین متغیرهای غیر استاتیک میتوانند از طریق سازنده مقداردهی شوند. اما برای متغیرهای استاتیک، از طریق سازنده مقداردهی نمیشوند زیرا هر بار که سازنده فراخوانی شود، مقدار موجود بازنویسی میشود.
تفاوت بین متغیر غیر استاتیک و متغیر استاتیک در سی شارپ
- هر شیء نسخهی مخصوص به خود از متغیر نمونه را دارد. تنها یک نسخه از متغیر استاتیک برای کل کلاس وجود دارد، بدون توجه به تعداد اشیائی که ایجاد میکنیم.
- تغییراتی که در متغیر نمونه از طریق یک شیء ایجاد میشود، در سایر اشیاء منعکس نمیشود زیرا هر شیء نسخهی جداگانهای از متغیر نمونه دارد. در مورد متغیرهای استاتیک، تغییرات در مقدار آن برای تمام اشیاء منعکس میشود زیرا متغیر استاتیک بین تمام اشیاء مشترک است.
- متغیرهای نمونه از طریق ارجاعات به اشیاء قابل دسترسی هستند. متغیرهای استاتیک میتوانند مستقیماً با استفاده از نام کلاس دسترسی پیدا کنند.
- متغیرهای نمونه مقداردهی نمیشوند اگر هیچ شیئی ایجاد نشود، اما اگر n شیء ایجاد شود، n بار مقداردهی میشوند. متغیر استاتیک تنها یک بار در طول چرخهی عمر کلاس مقداردهی میشود.
- نحوه نوشتار متغیرهای نمونه و استاتیک:
class Example { static int a; // static variable int b; // instance variable }
متغیر ثابت در سی شارپ
اگر یک متغیر با استفاده از کلمه کلیدی const تعریف شود، بهعنوان یک متغیر ثابت شناخته میشود و این متغیرهای ثابت پس از تعریف نمیتوانند تغییر کنند. بنابراین، حتماً باید در زمان تعریف مقداردهی شوند.
متغیرهای ثابت معمولاً برای مقادیری استفاده میشوند که باید در طول برنامه ثابت بمانند، مانند ثابتهای ریاضی یا تنظیمات پیکربندی، که به بهبود خوانایی کد و جلوگیری از تغییرات تصادفی کمک میکنند.
مثال ۱: برنامه زیر خطا خواهد داد زیرا در زمان تعریف متغیر ثابت، مقداری اختصاص داده نشده است.
// C# program to illustrate the // constant variables using System; class Program { // constant variable max // but no value is provided const float max; // Main Method public static void Main() { // creating object Program obj = new Program(); // it will give error Console.WriteLine("The value of b is = " + Program.b); } }
خطا
prog.cs(8,17): error CS0145: A const field requires a value to be provided
مثال ۲: برنامهای برای نمایش استفاده از متغیرهای ثابت:
// C# program to illustrate the // constant variable using System; class Program { // instance variable int a = 10; // static variable static int b = 20; // constant variable const float max = 50; // Main Method public static void Main() { // creating object Program obj = new Program(); // displaying result Console.WriteLine("The value of a is = " + obj.a); Console.WriteLine("The value of b is = " + Program.b); Console.WriteLine("The value of max is = " + Program.max); } }
خروجی
The value of a is = 10 The value of b is = 20 The value of max is = 50
نکات مهم درباره متغیرهای ثابت:
- رفتار متغیرهای ثابت شبیه به متغیرهای استاتیک است، یعنی در طول چرخه عمر یک کلاس تنها یک بار مقداردهی میشوند و برای دسترسی یا مقداردهی به آنها نیازی به نمونهسازی از کلاس نیست.
- تفاوت بین متغیرهای ثابت و استاتیک این است که متغیرهای استاتیک میتوانند تغییر کنند، در حالی که متغیرهای ثابت پس از تعریف دیگر قابل تغییر نیستند.
متغیر فقط خواندنی در سی شارپ
اگر یک متغیر با استفاده از کلمه کلیدی readonly تعریف شود، بهعنوان متغیر فقطخواندنی شناخته میشود. این متغیرها نمیتوانند تغییر کنند، مشابه متغیرهای ثابت، اما میتوانند پس از مقداردهی اولیه تغییر کنند.
نیازی نیست که متغیر فقطخواندنی در زمان تعریف مقداردهی شود. آنها میتوانند تحت یک سازنده نیز مقداردهی شوند.
رفتار متغیرهای فقطخواندنی شبیه به متغیرهای غیر استاتیک است، یعنی تنها پس از ایجاد نمونه از کلاس مقداردهی میشوند و برای هر نمونه بهصورت جداگانه مقداردهی میشوند.
مثال ۱: در برنامه زیر، متغیر فقطخواندنی k با هیچ مقداری مقداردهی نشده است. اما هنگام چاپ مقدار آن، مقدار پیشفرض نوع int، یعنی ۰، نمایش داده میشود.
// C# program to show the use // of readonly variables // without initializing it using System; class Program { // instance variable int a = 80; // static variable static int b = 40; // Constant variables const float max = 50; // readonly variables readonly int k; // Main Method public static void Main() { // Creating object Program obj = new Program(); Console.WriteLine("The value of a is = " + obj.a); Console.WriteLine("The value of b is = " + Program.b); Console.WriteLine("The value of max is = " + Program.max); Console.WriteLine("The value of k is = " + obj.k); } }
خروجی
The value of a is = 80 The value of b is = 40 The value of max is = 50 The value of k is = 0
مثال ۲: برای نمایش مقداردهی متغیر فقطخواندنی در سازنده.
// C# program to illustrate the // initialization of readonly // variables in the constructor using System; class Pstore { // instance variable int a = 80; // static variable static int b = 40; // Constant variables const float max = 50; // readonly variables readonly int k; // constructor public Pstore() { // initializing readonly // variable k this.k = 90; } // Main Method public static void Main() { // Creating object Pstore obj = new Pstore(); Console.WriteLine("The value of a is = " + obj.a); Console.WriteLine("The value of b is = " + Pstore.b); Console.WriteLine("The value of max is = " + Pstore.max); Console.WriteLine("The value of k is = " + obj.k); } }
خروجی
The value of a is = 80 The value of b is = 40 The value of max is = 50 The value of k is = 90
مثال ۳: برنامهای برای نمایش زمانی که متغیر فقطخواندنی پس از تعریف و خارج از سازنده مقداردهی میشود.
// C# program to illustrate the // initialization of readonly // variables twice using System; class Pstore { // instance variable int a = 80; // static variable static int b = 40; // Constant variables const float max = 50; // readonly variables readonly int k; // constructor public Pstore() { // first time initializing // readonly variable k this.k = 90; } // Main Method public static void Main() { // Creating object Pstore obj = new Pstore(); Console.WriteLine("The value of a is = " + obj.a); Console.WriteLine("The value of b is = " + Pstore.b); Console.WriteLine("The value of max is = " + Pstore.max); // initializing readonly variable again // will compile time error obj.k = 55; Console.WriteLine("The value of k is = " + obj.k); } }
خطا
prog.cs(41,13): error CS0191: A readonly field `Pstore.k’ cannot be assigned to (except in a constructor or a variable initializer)
نکات مهم درباره متغیرهای فقطخواندنی:
- تنها تفاوت بین متغیرهای فقطخواندنی و متغیرهای نمونه این است که متغیرهای نمونه قابل تغییر هستند، اما متغیرهای فقطخواندنی نمیتوانند تغییر کنند.
- متغیر ثابت یک مقدار ثابت برای کل کلاس است، در حالی که متغیرهای فقطخواندنی یک مقدار ثابت برای هر نمونه از کلاس دارند.
جمع بندی
در این مقاله، انواع متغیر در سی شارپ مورد بررسی قرار گرفت. متغیرهای محلی، نمونه، استاتیک، ثابت و فقطخواندنی هرکدام ویژگیها و کاربردهای خاص خود را دارند که در برنامهنویسی میتوانند تأثیر زیادی بر نحوه مدیریت دادهها و رفتار برنامه داشته باشند.
به طور خلاصه، متغیرها در سی شارپ برای هر توسعهدهندهای که قصد ایجاد پروژههای پیچیده را دارد، ضروری هستند. انواع مختلفی از تعریف متغیرها به توسعهدهندگان این امکان را میدهند که دادهها را به روشهایی که پروژههایشان نیاز دارند، اعمال کنند. آگاهی از هدف و کاربرد هر نوع متغیر میتواند به بهبود طراحی پروژه و کاهش تلاشهای توسعه کمک کند. مهمترین نکته این است که توسعهدهنده ساختار و اهمیت متغیرها در سی شارپ را هنگام برنامهنویسی یک برنامه جدید یا بازی درک کند. با در نظر گرفتن این نکات، شما باید قادر باشید به راحتی و با اطمینان از متغیرها در C# طبق نیاز خود استفاده کنید.
سلام سپاسگزارم عالی بود. به خصوص که برنامهها را خودم نوشتم و اجرا کردم بهم کمک کرد تا بهتر موضوع را درک کنم.
سلام
ممنون از شما واقعا کاربردی بود.
توضیحات و مطالب بسیار ساده و روان و قابل فهم
خیلی ممنون
سلام
توضیحات عالی بود. الان کاملاً میدونم چطور انواع مختلف متغیرها رو تعریف و استفاده کنم. ممنون از این آموزش دقیق.
توضیحات جامع و کاربردی بود. فقط کاش نسخه PDF مقاله هم برای دانلود میذاشتید تا بتونیم راحتتر ذخیره کنیم.