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

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

در بحث آموزش سی شارپ در بسیاری از پروژه های نرم افزاری اجزا و عملیاتی وجود دارد که وابسته به اشیا نیستند و مقداری ثابت (مانند عدد پی در ریاضی) و یا رفتاری ثابت بدون وابستگی به شی اجرا کننده را ارایه می دهند (مانند عملیات پایه ریاضی). زبان سی شارپ و برنامه نویسی شی گرا برای این منظور اعضای استاتیک را پیشنهاد می دهد که بدون نیاز به نمونه سازی از کلاس ها به صورت شی، مستقیما توسط خود کلاس قابل فراخوانی و استفاده هستند.

تصور کنید کلاسی به وجود آورده اید به نام Book. برای دسترسی به کلاس Book در متدMain() ، باید در وهله ی اول متغیر آن را تعریف کنید. متغیر تعریف شده ی کلاس، نمونه ای از آن کلاس نیز اطلاق می گردد. به همین شکل می توان هر تعداد نمونه که مورد نیاز است از کلاس (واحد) تعریف کرد.

                
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 را پیش یا پس از آن به کار ببردید (البته مادام اینکه قبل از نوع داده استفاده شود).

مثال:

                
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();‎
‎    }‎
‎}

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


مشاهده فیلم آموزشی
1394/07/27 17796 3452
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

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