آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

کلاس استاتیک (static class) در سی شارپ

دوره های مرتبط با این مقاله

چنانچه کلاسی در سی شارپ به صورت استاتیک تعریف شود تمام اعضای آن باید از نوع استاتیک باشند. این بدان معناست که هیچ عضو معمولی (غیر استاتیک) نمی توان در آن کلاس قرار داد. در این بخش از آموزش سی شارپ به این موضوع خواهیم پرداخت.

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

کلاسی هست که اعضای آن باید ایستا باشند (در قالب ایستا ایجاد شوند). به عبارت دیگر، نمی توان عضوی غیر ایستا (non-static) به کلاسی ایستا افزود: کلیه ی اعضا به استثنای ثابت ها، باید ایستا باشند.

ایجاد کلاس ایستا

برای ایجاد کلاسی ایستا، کلیدواژه ی static را پیش از کلیدواژه ی class به کار ببرید.

مثال:

                
using System;

public static class Square
{
    public static double side;

    public static double Perimeter()
    {
        return side * 4;
    }

    public static double Area()
    {
        return side * side;
    }
}

public class Exercise
{
    public static int Main()
    {
        Square.Side = 36.84;

        Console.WriteLine("Square Characteristics");
        Console.Write("Side:     ");
        Console.WriteLine(Square.side);
        Console.Write("Perimeter: ");
        Console.WriteLine(Square.Perimeter());
        Console.Write("Area:     ");
        Console.WriteLine(Square.Area());

        Console.ReadKey();

        return 0;
    }
}

نتیجه

Square Characteristics
Side:     36.84
Perimeter: 147.36
Area:     1357.1856
Press any key to continue . . .

توابع سازنده ی استاتیک

می توان constructor را مانند دیگر توابع معمول در C#، Static تعریف کرد. برای این منظور قوانینی وجود دارد که می بایست از آن ها پیروی کنید. برای استفاده از تابع سازنده ای که static تعریف شده (برای استفاده از آن خارج از کلاس خودش نیازی به ساختن نمونه یا شی از آن کلاس نیست)، بایستی آن را به طور صریح ایجاد نمایید (کامپایلر خودکار آن را برای شما ایجاد نمی کند).

تابع سازنده ی static باید به عنوان constructor پیش فرض مورد استفاده قرار گیرد، به عبارتی روشن تر باید constructor ای تعریف کنید که آرگومان نمی گیرد.

                
public class Person
{
    public string firstName;

    static Person()
    {
    }
}

اگر یک تابع سازنده ی static ایجاد کنید، آن وقت دیگر امکان استفاده از فیلدها یا اعضای غیر static کلاس مورد نظر وجود ندارد

کلاس های ایستا (static class) در سی شارپ

با این حال، شما این اجازه را دارید که به فیلدهای کلاس دسترسی داشته باشید.

                
using System;

public class Person
{
    public string firstName;

    static Person()
    {
    }
}

public class Exercise
{
    public static int Main()
    {
        Person pers = new Person();
        pers.firstName = "Gertrude";
        Console.WriteLine("Personal Identification");
        Console.Write("Name: ");
        Console.WriteLine(pers.firstName);
        Console.ReadKey();
        return 0;
    }
}

برای استفاده از constructor ای که دارای خاصیت static می باشد، چند گزینه پیشرو دارید. برای مقداردهی اولیه ی متغیر عضوی در تابع سازنده ی static، ابتدا لازم است یک متغیر برای آن کلاس اعلان کرده، سپس به آن متغیر عضو دسترسی پیدا کنید.

                
public class Person
{
    public string firstName;

    static Person()
    {
        Person pers = new Person();
        pers.firstName = "Gertrude";
    }
}

در واقع، یکی از دلایل استفاده از تابع سازنده ی static، مقداردهی اولیه ی فیلدهای static کلاس و یا انجام عملیاتی است که بین تمامی نمونه های کلاس به اشتراک گذاشته می شود. بنابراین، دیگر مورد استفاده ی تابع سازنده، مقداردهی اولیه ی متغیرهای عضو static آن کلاس می باشد. حال، در زمان دسترسی به فیلدهای static که در تابع سازنده مقداردهی اولیه شدند، می بینید که آن فیلدها مقادیر تخصیص یافته را درخود ذخیره کرده و آماده ی استفاده دارند.

                
using System;

public class Person
{
    public static string firstName;

    static Person()
    {
        firstName = "Gertrude";
    }
}

public class Exercise
{
    public static int Main()
    {
        Console.WriteLine("Personal Identification");
        Console.Write("Name: ");
        Console.WriteLine(Person.firstName);
        Console.ReadKey();
        return 0;
    }
}

نتیجه

Personal Identification
Name: Gertrude
Press any key to continue . . .

از آنجایی که تابع سازنده static می باشد، دسترسی به آن از طریق اعلان متغیر برای کلاس مورد نظر امکان پذیر نمی باشد. قانون دیگری که در کار با تابع سازنده ی static باید رعایت کرد این است که نباید تحت هیچ شرایطی به آن تنظیم کننده ی سطح دسترسی (access modifier) اضافه کرد. کد زیر با خطا مواجه می شود

                
public class Person
{
    public static Person()
    {
    }
}

می توانید یک کلاس تعریف کنید که ترکیبی از تابع سازنده ی static و یک یا چند تابع constructor غیر static می باشد.

                
public class Person
{
    public string firstName;
    public string lastName;

    static Person()
    {
    }

    public Person(string first, string last)
    {
        firstName = first;
        lastName = last;
    }
}

اگر چنین کلاسی تعریف کرده و متغیری برای آن اعلان کنید، constructor پیش فرضی برای آن وجود نداشته یا در حال حاضر دسترس پذیر نمی باشد. اگر هم می خواهید متغیری برای آن تعریف کنید، بایستی از یک constructor که دو پارامتر ورودی می گیرد (آن متغیر را به عنوان آرگومان می پذیرد)، استفاده نمایید.

                
using System;

public class Person
{
    public string firstName;
    public string lastName;

    static Person()
    {
    }

    public Person(string first, string last)
    {
        firstName = first;
        lastName = last;
    }
}

public class Exercise
{
    public static int Main()
    {
        Person pers = new Person("Gertrude", "Monay");

        Console.WriteLine("Personal Identification");
        Console.Write("First Name: ");
        Console.WriteLine(pers.firstName);
        Console.Write("Last Name: ");
        Console.WriteLine(pers.lastName);

        Console.ReadKey();
        return 0;
    }
}

نتیجه

Personal Identification
First Name: Gertrude
Last Name: Monay
Press any key to continue . . .

با توجه به آنچه گفته شد، تنها زمانی مجاز به تعریف constructor هستید که دلیل خوبی برای ایجاد آن داشته باشید.


مشاهده فیلم آموزشی
  • 7518
  •    1880
  • تاریخ ارسال :   1394/07/27

دانلود PDF دانلود سورس کد دانشجویان گرامی اگر این مطلب برای شما مفید بود لطفا ما را در GooglePlus محبوب کنید
رمز عبور: tahlildadeh.com یا www.tahlildadeh.com
ارسال دیدگاه نظرات کاربران
شماره موبایل دیدگاه
عنوان پست الکترونیک

ارسال

آموزشگاه برنامه نویسی تحلیل داده
آموزشگاه برنامه نویسی تحلیل داده

تمامی حقوق این سایت متعلق به آموزشگاه تحلیل داده می باشد .