کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

متغیرهای استاتیک (Static Variables) در سی شارپ

وقتی توی برنامه‌نویسی با کلاس‌ها و اشیا کار می‌کنی، خیلی زود به اعضایی می‌رسی که قرار نیست فقط به یک شیء خاص وابسته باشن. توی چنین شرایطی، اعضای ایستا یا static در C# به کمکمون میان و راه ساده‌تری برای تعریف و دسترسی به داده‌ها و رفتارهای مشترک در اختیارمون می‌ذارن.

توی این بخش از آموزش C# می‌خوایم با مفهوم اعضای استاتیک و نحوه استفاده از اون‌ها آشنا بشیم. اگه می‌خوای در کنار این مبحث، مفاهیم پایه و شیءگرایی در سی شارپ رو هم اصولی یاد بگیری، می‌تونی مسیر آموزش C# رو هم دنبال کنی.

توی خیلی از پروژه‌های نرم‌افزاری، با اجزا و عملیات‌هایی سروکار داریم که به یک شیء خاص وابسته نیستن. ممکنه با یک مقدار ثابت، مثل عدد پی در ریاضیات، یا یک رفتار ثابت، مثل عملیات پایه ریاضی، روبه‌رو باشیم. زبان C# و برنامه‌نویسی شیءگرا برای چنین شرایطی اعضای استاتیک رو در اختیارمون قرار می‌ده. این اعضا بدون اینکه لازم باشه از کلاس یک نمونه یا شیء بسازیم، مستقیماً از طریق خود کلاس قابل فراخوانی و استفاده هستن.

فرض کن یک کلاس به نام Book ساخته‌ای. برای اینکه بتونی از کلاس Book در متد Main() استفاده کنی، در حالت معمول باید اول یک متغیر از این کلاس تعریف کنی. متغیری که از یک کلاس ساخته می‌شه، در واقع یک نمونه یا Instance از اون کلاس محسوب می‌شه. به همین شکل، هر تعداد نمونه‌ای که نیاز داشته باشی می‌تونی از یک کلاس ایجاد کنی.

                
public class Book
‎{‎
‎    public string title;‎
‎    public string author;‎
‎    public short  yearPublished;‎
‎    public int    numberOfPages;‎
‎    public char   coverType;‎
‎}‎

public class Exercise
‎{‎
‎    static int Main()‎
‎    {‎
        var written = new Book();‎
        var bought  = new Book();‎
        return 0;‎
‎    }‎
‎}‎‏‎

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

                
using System;‎

public class Book
‎{‎
‎    public string title;‎
‎    public string author;‎
‎    public short yearPublished;‎
‎    public int numberOfPages;‎
‎    public char coverType;‎
‎}‎

public class Exercise
‎{‎
‎    static int Main()‎
‎    {‎
‎        var first = new Book();‎
‎        first.title = "Psychology and Human Evolution";‎
‎        first.author = "Jeannot Lamm";‎
‎        first.yearPublished = 1996;‎
‎        first.numberOfPages = 872;‎
‎        first.coverType = 'H';‎

‎ ‎       Console.WriteLine("Book Characteristics");‎
‎        Console.Write("Title:  ");‎
‎        Console.WriteLine(first.title);‎
‎        Console.Write("Author: ");‎
‎        Console.WriteLine(first.author);‎
‎        Console.Write("Year:   ");‎
‎        Console.WriteLine(first.yearPublished);‎
‎        Console.Write("Pages:  ");‎
‎        Console.WriteLine(first.numberOfPages);‎
‎        Console.Write("Cover:  ");‎
‎        Console.WriteLine(first.coverType);‎

‎ ‎       var second = new Book();‎
‎ ‎       second.title = "C# First Step";‎
‎        second.author = "Alexandra Nyango";‎
‎        second.yearPublished = 2004;‎
‎        second.numberOfPages = 604;‎
‎        second.coverType = 'P';‎
‎        Console.WriteLine("Book Characteristics");‎
‎        Console.Write("Title:  ");‎
‎        Console.WriteLine(second.title);‎
‎        Console.Write("Author: ");‎
‎        Console.WriteLine(second.author);‎
‎        Console.Write("Year:   ");‎
‎        Console.WriteLine(second.yearPublished);‎
‎        Console.Write("Pages:  ");‎
‎        Console.WriteLine(second.numberOfPages);‎
‎        Console.Write("Cover:  ");‎
‎        Console.WriteLine(second.coverType);‎

‎        return 0;‎
‎    }‎
‎}

نتیجه

Book Characteristics
Title:  Psychology and Human Evolution
Author:  Jeannot Lamm
Year:   1996‎
Pages:  872‎
Cover:  H
‎ ‎
Book Characteristics
Title:  C# First Step
Author: Alexandra Nyango
Year:   2004‎
Pages:  604‎
Cover:  P

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

متغیر ایستا

برای اینکه یک متغیر رو به عنوان عضو ایستای یک کلاس تعریف کنیم، کافیه کلمه کلیدی static رو سمت چپ اون قرار بدیم. مثال زیر رو ببین:

                
public class Book
‎{‎
‎    static string title;  ‎
‎}

به همین روش می‌تونی هر تعداد متغیر ایستا که لازم داری تعریف کنی. همون‌طور که در مباحث قبلی گفتیم، برای مشخص کردن سطح دسترسی فیلدهای کلاس از modifier یا تنظیم‌کننده‌های سطح دسترسی استفاده می‌کنیم. اگه بخوای از modifier استفاده کنی، می‌تونی کلمه کلیدی static رو قبل یا بعد از اون قرار بدی؛ البته باید حواست باشه که static در هر صورت قبل از نوع داده قرار بگیره.

مثال:

                
public class Book
‎{‎
‎    public static string title;‎
‎    static public string author;‎
‎}‎

برای دسترسی به یک متغیر ایستا، اول باید مشخص کنیم از کجا می‌خوایم به اون دسترسی داشته باشیم. نکته مهم اینجاست که برای دسترسی به یک متغیر ایستا، باید کلاس مربوط به اون متغیر رو مشخص کنیم.

مثال:

                
using System;

public class Book
‎{‎
‎    public static string title;‎
‎    static public string author;‎
‎    public short yearPublished;‎
‎    public int pages;‎
‎    public char coverType;‎
‎}‎

public class Exercise
‎{‎
‎    static int Main()‎
‎    {‎
‎        var first = new Book();‎
‎        Book.title = "Psychology and Human Evolution";‎
‎        Book.author = "Jeannot Lamm";‎
‎        first.yearPublished = 1996;‎
‎        first.pages = 872;‎
‎        first.coverType = 'H';‎
‎ ‎        Console.WriteLine("Book Characteristics");‎
‎        Console.Write("Title:  ");‎
‎        Console.WriteLine(Book.title);‎
‎        Console.Write("Author: ");‎
‎        Console.WriteLine(Book.author);‎
‎        Console.Write("Year:   ");‎
‎        Console.WriteLine(first.yearPublished);‎
‎        Console.Write("Pages:  ");‎
‎        Console.WriteLine(first.Pages);‎
‎        Console.Write("Cover:  ");‎
‎        Console.WriteLine(first.coverType);‎
‎ ‎       var second = new Book();‎
‎        Book.title = "C# First Step";‎
‎        Book.author = "Alexandra Nyango";‎
‎        second.yearPublished = 2004;‎
‎        second.pages = 604;‎
‎        second.coverType = 'P';‎
‎        Console.WriteLine("Book Characteristics");‎
‎        Console.Write("Title:  ");‎
‎        Console.WriteLine(Book.title);‎
‎        Console.Write("Author: ");‎
‎        Console.WriteLine(Book.author);‎
‎        Console.Write("Year:   ");‎
‎        Console.WriteLine(second.yearPublished);‎
‎        Console.Write("Pages:  ");‎
‎        Console.WriteLine(second.Pages);‎
‎        Console.Write("Cover:  ");‎
‎        Console.WriteLine(second.coverType);‎
‎        return 0;‎
‎    }‎
‎}‎

همون‌طور که در مثال بالا می‌بینی، وقتی یک متغیر به صورت ایستا تعریف می‌شه، دیگه برای دسترسی به اون از بیرون کلاس نیازی به ساختن یک نمونه از کلاس نداریم. بنابراین اگه همه اعضای یک کلاس رو به صورت ایستا تعریف کنیم، برای دسترسی به اون‌ها دیگه لازم نیست یک متغیر از اون کلاس بسازیم. در مثال بعدی، فیلدهای Author و Title از کلاس Book بدون اینکه نمونه‌ای از Book ساخته بشه، در کلاس Exercise قابل دسترسی هستن.

                
using System;‎
public class Book
‎{‎
‎    public static string title;‎
‎    static public string author;‎
‎}‎

public class Exercise
‎{‎
‎    static void Main()‎
‎    {‎
‎        Book.title = "Psychology and Human Evolution";‎
‎        Book.author = "Jeannot Lamm";‎

‎‎‎        Console.WriteLine("Book Characteristics");‎
‎        Console.WriteLine("Title:  ");‎
‏        Console.WriteLine(Book.title);‎
‎        Console.WriteLine("Author: ");‎
‏        ‏Console.WriteLine(Book.author);‎

‎ ‎       Book.title = "C# First Step";‎
‎        Book.author = "Alexandra Miles";‎

‎        Console.WriteLine("Book Characteristics");‎
‎        Console.WriteLine("Title:  ");‎
‏        Console.WriteLine(Book.title);‎
‎        Console.WriteLine("Author: ");‎
‏        ‏Console.WriteLine(Book.author);‎

‎ ‎       Console.ReadKey();‎
‎    }‎
‎}

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


اگه می‌خوای مفاهیم C# رو از پایه و به شکل منظم یاد بگیری، مبحث اعضای استاتیک می‌تونه یکی از قدم‌های مهم در مسیر یادگیری برنامه‌نویسی شیءگرا باشه. برای ادامه مسیر و یادگیری اصولی‌تر، می‌تونی به دوره آموزش C# مراجعه کنی و مباحث مختلف این زبان رو مرحله‌به‌مرحله دنبال کنی.

مشاهده فیلم آموزشی
1405/06/11 18142 3550
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...