توي آخرين پست در مورد متد ها صحبت كرديم اما اگر دقت كرده بوديد متوجه مي شديد كه ما تا اينجا از يك متد استفاده كرده ايم كه ننوشته ايم! به كد زير دقت كنين:
کد:
Person p = new Person();
همانطور كه
قبلا هم گفتم براي استفاده از متد ها كافيه اسم متد رو با استفاده از () بنويسيم. كد بالا نيز اسم يك متد به نام ()Person ذكر شده است:
سازنده ها در سي شارپ - Constructors in CSharp
سازنده (Constructor) متدي است هم نام با كلاس كه چه بنويسيم (تايپ كنيم) و چه ننويسيم بر روي كلاس ها وجود دارد. همانطور كه قبلا هم ديديد من براي كلاس Person متدي هم نام با كلاس ننوشتم اما مي توانستم از اين متد در كنار كلمه new استفاده كنيم. كلمه new فقط براي ايجاد كردن يك شيء در حافظه در كنار نام متد استفاده مي شود. پس دقت داشته باشين كه وقتي ما يك reference copy از يك شيء تهيه ميكنيم در واقع فقط يك كپي از آدرس حافظه همان شيء را داريم (مثل 2 ريموت كنترل به يك تلويزويون) , اما وقتي از new به همراه اسم متد استفاده مي كنيم يك شيء جديد در حافظه داريم.
سازنده پيشفرض - Default Constructor
سازنده پيش فرض يا همان Default Constructor متدي است هم نام با كلاس كه پارامتر ورودي ندارد و شما به صورت پيش فرض يك ورژن از سازنده ها رو در كلاستان دارين. به اين معني كه حتي وقتي كلاس شما داراي هيچ عضوي نيست (مثل اين كلاس Emp ) باز داراي يك متد سازنده يا همان Constructor مي باشد. البته اين به اين معني نيست كه شما نمي توانيد سازنده ها را تايپ كنين:
[code]
public class Emp
{
}
public class Student
{
public Student()
{
// default constructor
}
}
[code]
در هر دو كلاس بالا شما داراي default constructor مي باشد پس مي توانين كه كد هاي زير را تايپ كنين:
کد:
Emp e = new Emp();Student st = new Student();
نكته بسيار مهم استفاده است كه شما مي توانين از Constructor ها داشته باشيد. دقت كنين كه وقتي شما كدي را داخل block of code يك سازنده از يك كلاس مي نويسيد مادامي كه از اين كلاس شيء جديد ساخته مي شود كدي كه داخل constructor نوشته شده نيز اجرا خواهد شد در نتيجه شما با استفاده از سازنده ها اين توانمندي را خواهيد داشت كه
در زمان ساخته شده هر شيء كد مورد نظرتان را اجراء نمائيد.
فرض كنين كه من مي خواهم هر زماني كه يك object از كلاس Emp ساخته شد يك جمله در محيط كنسول چاپ شود كه يك object جديد ساخته شد. پس:
کد:
public class Emp{public Emp(){Console.WriteLine("New Emp Object Created ...");}}
Constructor Overloading
در سي شارپ شما اين امكان را داريد كه ورژن هاي متفاوتي از يك متد را داشته باشين. از آنجايي كه سازنده ها هم به نوعي متد محسوب مي شوند شما مي توانيد ورژن هاي متفاوتي از سازنده ها را داشته باشين. براي مثال در نظر بگيرين كه من مي خواهم يك ورژن از سازنده براي كلاس Person بنويسم كه وقتي از اين كلاس شيء ايجاد مي شود حتما نام و سن فرد ذكر شود. پس براي اينكار سازنده اي تعريف مي كنم كه داراي دو ورودي , يكي از جنس رشته اي (براي نام) و ديگري از جنس عددي (براي سن) داشته باشد:
کد:
public class Person{public Person(string name, int Age){Name = name;Age = age;}public int Age;public string Name;}
! دقت داشته باشين كه وقتي شما يك ورژن ديگر از سازنده را مي نويسن (ورژني به غير از سازنده پيش فرض) در حالتيكه سازنده پيش فرض را تايپ نكنين ديگر امكان استفاده از سازنده پيش فرض را نداريد.
به همين دليل در صورتيكه شما كد بالا را بنويسين ديگر امكان استفاده از سازنده پيش فرض كلاس Person وجود نخواهد داشت و اين به اين معني است كه شما به برنامه نويس اجبار خواهيد كرد كه حتما موقع ساختن شيء از كلاس شما نام و سن شيء را مشخص كند.
کد:
//You will get compile time error if you uncomment the next line//Person p = new Person();Person p =new Person("Ali",20);
در صورتيكه امكان ايجاد كردن شيء از اين كلاس بدون مشخص كردن نام و سن را نياز داريد مي توانين سازنده پيش فرض را نيز تايپ نمائيد.
نقش هاي يك برنامه نويس - Programmer 's Role
1. Class Programmer
2. Class Creator
هر برنامه نويس در حين نوشتن كد مي تواند دو نقش داشته باشد و بسيار مهم است كه نقش خود را در هر لحظه بتواند تشخيص دهد.
فرض كنين كه شما در حال نوشتن كلاس Emp هستين :
کد:
public class Emp{...
در اين حالت شما يك Class Creator مي باشيد. به اين معني كه شما يك كلاس را ايجاد مي كنين فرقي نمي كند كه شما از اين كلاس استفاده كنين يا كس ديگري.
در حالتي كه شما در كلاس Programm هستيد و داخل متد Main از كلاس Empاستفاده مي كنين شما يك Class Programm براي كلاس Emp هستيد يعني از اين كلاس استفاده مي كنين. دقت كنين كه در همين لحظه شما براي كلاس Programm يك Class Creator مي باشين.
درك كردن اين نقش ها به شما كمك خواهد كرد كه ديد بهتري نسبت به توليد كلاس ها داشته باشين و متوجه باشين كه چه چيزي رو در اختيار چه نقشي قرار مي دهيد.
علاقه مندی ها (بوک مارک ها)