آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 5 : ایجاد اشیاء

در قسمت قبلی آموزش در مورد خصوصیات یا Property ها و نحوه صحیح استفاده از آنها در کلاس ها صحبت کردیم. در این بخش در مورد سازنده ها یا Constructors، مقدار دهی اولیه اشیاء (Object Initialization) و نوع های بدون نام (Anonymous Types) صحبت می کنیم.زمانی که شما کلاسی را تعریف می کنید، این کلاس حاوی یکسری خصوصیات و یکسری رفتارها یا همان متدها می باشد. شما بعد از ایجاد شئ، خصوصیات را مقدار دهی کرده و از شئ استفاده می کنید. اما چندین راه دیگر برای مقدار دهی خصوصیات و آماده سازی اولیه کلاس وجود دارد. ما در این قسمت دو روش مختلف را بررسی می کنیم:

  1. مقدار دهی اولیه شئ یا Object Initialization
  2. استفاده از سازنده ها یا Constructors

مقدار دهی اولیه با کمک Object Initialization

در این روش، شما زمانی که اقدام به ایجاد یک شئ می کنید، می توانید مقادیر خصوصیات و فیلدهای آن را مشخص کنید. کلاس Person را در نظر بگیرید:

public class Person
{
    public string FirstName;
    public string LastName;
}

به صورت پیش فرض، شما یک شئ از کلاس ساخته و خصوصیات آن را مقدار دهی می کنید:

var person = new Person();
person.FirstName = "Hossein";
person.LastName = "Ahmadi";

مقدار دهی اولیه شئ کار ساده ایست، کافیست پس از نوشتن () بعد از نام کلاس در قسمت new بین علامت های {} مقادیر خصوصیات را مشخص کنیم:

var person = new Person()
{
    FirstName = "Hossein",
    LastName = "Ahmadi"
};

با این کار مقادیر FirstName و LastName در کلاس Person مقدار دهی اولیه خواهند شد. می توانید در این حالت، از نوشتن () صرفنظر کنید:

var person = new Person
{
    FirstName = "Hossein",
    LastName = "Ahmadi"
};

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

سازنده ها یا Constructors

اگر دقت کرده باشید، زمانی که شئ ای را تعریف می کنیم، بعد از نوشتن نام کلاس بعد از کلمه new از () استفاده می کنیم، مشابه زمانی که تصمیم به صدا زدن یک متد دارید. دلیل اینکار، پروسه ایست که سی شارپ برای ایجاد کردن کلاس ها انجام می دهد. زمانی که شما شئ ای از یک کلاس ایجاد می کنید، سی شارپ قسمتی با نام سازنده یا Constructor را برای آن کلاس صدا می زند. این سازنده یک متد می باشد که می تواند بدون پارامتر یا با پارامتر باشد و داخل آن کدی نوشته می شود که می خواهیم در هنگام ایجاد شئ اجرا شود. با یک مثال ساده سازنده ها را بررسی می کنیم. کلاس Person را در نظر بگیرید، برای این کلاس یک سازنده تعریف می کنیم که مقادیر FirstName و LastName را به عنوان ورودی گرفته و خصوصیات مربوطه را مقدار دهی می کند:

public class Person
{
    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

در کد بالا، قسمت سانده برای کلاس Person با دو پارامتر تعریف شده است. به شیوه تعریف سازنده دقت کنید، ابتدا سطح دسترسی به سازنده مشخص شده، سپس نام کلاس نوشته شده که برای سازنده ها، این نام دقیقاً باید معادل نام کلاس باشد، سپس پارامترهای مورد نظر و بعد از آن ها بدنه سازنده. دقت کنید سازنده ها مقدار بازگشتی ندارند. با توضیحات گفته شده می توان ساختار کلی سازنده را به صورت زیر بیان کرد:

{access-modifier} {class-name}([parameters])
{
    // constructor body
}

همچنین در بدنه سازنده بالا، به کلمه کلیدی this دقت کنید. کلمه کلیدی this به شئ جاری که روی کلاس ساخته شده است اشاره می کند. فرض کنید شما ده ها شئ از روی یک کلاس ساخته اید، زمانی که یک رفتار را صدا می زنید و داخل آن رفتار از کلمه کلیدی this استفاده می کنید، this به همان شئ ای اشاره می کند که رفتار در آن صدا زده شده است. در این سازنده نیز کلمه کلیدی this به شئ ای اشاره می کند که سازنده برای آن صدا زده شده.پس از تعریف سازنده می توان هنگام ایجاد شئ، مقادیر مورد نظر را به سازنده ارسال کرد:

var person = new Person("Hossein", "Ahmadi");

با اجرای کد بالا، خصوصیت های FirstName و LastName هنگام ایجاد شئ، مقدار دهی خواهند شد. اما باید به یک نکته در اینجا توجه داشت، زمانی که شما سازنده ای به همراه پارامتر برای یک کلاس تعریف می کنید، دیگر نمی توانید از کلاس بدون ارسال پارامتر در سازنده شئ بسازید. دلیل این موضوع، عدم وجود سازنده ای به نام سازنده پیش فرض یا Default Constructor می باشد. سازنده پیش فرض، سازنده ایست که هیچ پارامتری را به عنوان ورودی نمی گیرد. زمانی که شما سازنده ای برای یک کلاس تعریف نکرده اید، آن کلاس به صورت پیش Default Constrcutor برایش تعریف شده است. اما زمانی که اقدام به ایجاد یک سازنده برای کلاس کردید، اگر می خواهید از آن کلاس بدون ارسال پارامتر برای سازنده شئ بسازید، باید سازنده پیش فرض را به صورت دستی برای آن کلاس بنویسید:

public class Person
{
    public Person()
    {
    }

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

شما می توانید سطح دسترسی به سازنده ها را مشخص کنید، برای مثال، حالتی پیش می آید که می خواهد یک سازنده فقط داخل همان کلاس در دسترس باشد، یعتی شما از یک کلاس داخل خودش، مثلاً داخل یک رفتار، می خواهید یک شئ بسازید. برای این کار، می توانید سطح دسترسی سازنده مد نظر را private تعریف کنید. برای مثال:

public class Person
{
    public Person()
    {
    }

    private Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public Person CreateObject(string firstName)
    {
        return new Person(firstName, null);
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

در کد بالا، یک متد یا رفتار برای کلاس تعریف کردیم با نام CreateObject. این رفتار یک شئ از روی خود کلاس Person می سازد و پارامتر ارسالی به متد CreateObject را به سازنده ارسال می کند. اما خارج از شئ، دیگر نمی توانیم از سازنده ای که دو پارامتر را به عنوان ورودی می گیرد استفاده کنیم، زیرا این سازنده با سطح دسترسی private تعریف شده است.همانند متدها، سازنده ها می توانند overload داشته باشند، یعنی چند سازنده با signature های متفاوت. برای مثال، کلاس Person را به صورت زیر تغییر می دهیم:

public class Person
{
    public Person()
    {
    }

    public Person(string firstName)
    {
        this.FirstName = firstName;
    }

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

در اینجا دو سازنده برای کلاس تعریف کردیم که اولی یک پارامتر گرفته و دومی با دو پارامتر صدا زده می شود.

زنجیره سازنده ها یا Constrcutor Chaining

زمانی که شما چندین سازنده دارید، می توانید از کد های نوشته شده داخل یک سازنده در سازنده دیگر استفاده کنید. برای اینکار از قابلیت constructor chaining استفاده می شود. با یک مثال ادامه می دهیم، در کد قبلی سه سازنده داشتیم، سازنده پیش فرض، سازنده ای که تنها FirstName را می گرفت و سازنده ای که FirstName و LastName را به عنوان پارامتر می گرفت. در سازنده دوم، می توان از سازنده سوم جهت مقدار دهی استفاده کرد. برای این کار، کد بالا را به صورت زیر تغییر می دهیم:

public class Person
{
    public Person()
    {
    }

    public Person(string firstName) : this(firstName,null)
    {
    }

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public string FirstName { get; set; }
    public string LastName { get; set; }
}

سازنده دوم ما به صورت زیر تغییر کرده است:

public Person(string firstName) : this(firstName,null)
{
}

دقت کنید، بعد از بستن پرانتز پس از علامت : از کلمه کلیدی this مانند یک متد استفاده کرده ایم، در این روش، سازنده کلاس صدا زده شده و به عنوان پارامتر اول، firstName که در سازنده تعریف شده را ارسال کرده و عنوان پارامتر دوم مقدار null را ارسال کرده ایم. قابلیت constrcutor chaining، در کاهش تعداد خطوط نوشته در برنامه کمک زیادی به ما می کند.به این نکته توجه داشته باشید که نمی تواند سازنده را به صورت متد از داخل کلاس جایی غیر از خود سازنده ها صدا زد. همچنین سازنده ها تنها برای مقدار دهی خصوصیات استفاده نمی شوند، شما می توانید هر کدی را داخل سازنده بنویسید.

نوع های بدون نام یا Anonymous Types

نوع های بدون نام، به ما این امکان را می دهند تا شئ ای بدون تعریف کلاس ایجاد کنیم. این شئ تنها می تواند شامل خصوصیات باشد و قابلیت تعریف رفتار برای آن را نخواهیم داشت. در مثال زیر یک شئ بدون نام ایجاد کرده ایم که سه خصوصیت با نام FirstName و LastName و Age دارد:

var anonymous = new
{
    FirstName = "Hossein",
    LastName = "Ahmadi",
    Age = 29
};

Console.WriteLine(anonymous.FirstName + " " + anonymous.LastName);

همانطور که در کد مشاهده می کنید، کافیست بعد از کلمه کلیدی new بلافاصه به سراغ عملیات Object Initialization برویم و نیازی به نوشتن نام کلاس نیست. نوع های بدون نام کاربردهای زیادی در بخش LINQ دارند که در همین وب سایت دوره آموزشی LINQ توسط بنده نوشته شده و در این دوره آموزشی نیز مروری کوتاه بر این قابلیت خواهیم داشت. در بخش بعدی آموزش، مبحث وراثت یا Inheritance که مهمترین مبحث در زمینه برنامه نویسی شئ گرا می باشد را آغاز خواهیم کرد. ITPRO باشید

نویسنده : حسین احمدی

منبع : جزیره برنامه نویسی وب سایت توسینسو

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی است

#آموزش_زبان_سی_شارپ #برنامه_نویسی_شئ_گرا #ایجاد_object_در_c# #آموزش_ایجاد_شیء_در_سی_شارپ #آموزش_برنامه_نویسی_شئ_گرا #برنامه_نویسی_شئ_گرا_چیست؟ #سازنده_ها_در_برنامه_نویسی_شئ_گرا #آموزش_برنامه_نویسی #مقدار_دهی_اولیه_اشیاء_در_سی_شارپ #نوع_های_بدون_نام_در_سی_شارپ
عنوان
1 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 1 : مقدمه رایگان
2 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 2 : کلاس، اشیاء رایگان
3 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 3 : فیلد و رفتار رایگان
4 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 4 : Property ها رایگان
5 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 5 : ایجاد اشیاء رایگان
6 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 6 : وراثت رایگان
7 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 7 : Polymorphism رایگان
8 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 8 : abstract و sealed رایگان
9 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 9:سازنده در وراثت رایگان
10 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 10 : متد Extension رایگان
11 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 11: Value ها رایگان
12 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 12 : Interface رایگان
13 آموزش برنامه نویسی شی گرا در (#C) قسمت 13: Dependency Injection رایگان
14 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 14 : انواع Cast ها رایگان
15 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 15 : Operator Overloading رایگان
16 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 16 : Box و Unbox رایگان
17 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 17 : Generics رایگان
18 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 18 : List و Dictionary رایگان
19 آموزش برنامه نویسی شی گرا در سی شارپ (#C) قسمت 19 : مدیریت خطاها رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....