آموزش Class ها در سی شارپ - قسمت چهارم constructor چیست؟
قسمت چهارم
در این مقاله سعی می شود تا شما را با انواع سازنده ( constructor) که می تواند در بدنه کلاس ها (class) تعریف شود ، آشنا کنیم .
در مقالات قبلی ، از سری مقالات نوع داده کلاس (class) در سی شارپ در مورد تعریف کلاس صحبت کردیم و از آن به عنوان یک الگوی کلی برای ایجاد اشیا (objects) یاد کردیم. همچنین گفتیم اشیا (objects) در برنامه ، از روی نوع داده کلاس (class) ساخته می شوند و یک کلاس(class) می تواند نوع داده (data type) چندین شی ( object) باشد . و تاکید کردیم که شی (object) با کلاس (class) متفاوت است. در ادامه به مقدار دهی اشیا (objects) پرداختیم و گفتیم که مانند متغیر های (variables) از انواع دیگر باید قبل از استفاده مقدار دهی شود و از سازنده ها (constructor) به عنوان روش مقدار دهی متغیر ها نام بردیم و توضیح داده شد که چگونه یک سازنده (constructor) در بدنه کلاس تعریف می شود و توسط شی (object) فراخوانی می گردد. حال در ادامه انواع موجود از سازنده (constructor) را که در بدنه نوع داده کلاس در سی شارپ می تواند تعریف شود ، همراه با مثال بیشتر بررسی می کنیم.
سازنده پیش فرض (default constructor) :
در مقاله قبلی به صورت کامل در مورد آن صحبت کردیم در اینجا تنها برای یاد آوری اشاره می کنیم که سازنده ای (constructor) بدون پارامتر ورودی بود و این امکان وجود دارد که توسط برنامه نویس نیز تعریف شود و اگر تعریف نشود به صورت پیش فرض توسط کامپایلر نیز می تواند ایجاد شود و می تواند در زمان تعریف شی (object) فراخوانی شود .
نکته :
کامپایلر زمانی سازنده پیش فرض را ایجاد می کند که هیچ سازنده ای (چه سازنده پیش فرض و چه سازنده با پارامتر ) توسط برنامه نویس در بدنه نوع داده کلاس در سی شارپ تعریف نشده باشد .
مثال : خطا به خاطر عدم ایجاد سازنده توسط کامپایلر
namespace ClassStatment
{
public class person
{
// parameterized constructor
public person(string personName, string IDNumber)
{
name = personName;
identityNumber = IDNumber;
}
public string name { get; set; }
public string identityNumber { get; set; }
public string print()
{
return "name=" + name + " " + " identityNumber=" + identityNumber;
}
}
class Program
{
static void Main(string[] args)
{
person Operson = new person();
}
}
}
در این مثال با توجه به اینکه سازنده با پارامتر (parameterized constructor) توسط برنامه نویس تعریف شده است در نتیجه سازنده پیش فرض (default constructor) توسط کامپایلر ایجاد نخواهد شد (زیرا یک سازنده در بدنه کلاس وجود دارد) و در نتیجه ، در زمان تعریف شی ، با فراخوانی سازنده بدون پارامتر ، با خطای زیر مواجه خواهیم شد زیرا کامپایلر انتظار فراخوانی سازنده با پارامتر (parameterized constructor) را دارد : ( البته این به این معنا نیست که سازنده پیش فرض (default constructor) با وجود سازنده با پارامتر (parameterized constructor) نمی تواند توسط برنامه نویس ایجاد شود .)
سازنده با پارامتر (parameterized constructor) :
سازنده ای که دارای پارمتر ورودی است سازنده با پارامتر (parameterized constructor) نامیده می شود و پارامتر ها باید در زمان فراخوانی سازنده ، به متد سازنده ارسال شوند. استفاده از سازنده با پارامتر (parameterized constructor) معمولا برای زمان هایی که مقادیر متغیر ها بسته به موقعیت در برنامه تغییر می کند ، بسیار مناسب است ، زیرا مقادیر مورد نظر را می توان از طریق ارسال پارامتر در متغیر ها قرار داد.
مثال تعریف و فراخوانی یک سازنده با پارامتر (parameterized constructor) :
namespace ClassStatment
{
public class person
{
//default constructor
public person()
{
name = "test";
identityNumber = "1234667";
}
// parameterized constructor
public person(string personName, string IDNumber)
{
name = personName;
identityNumber = IDNumber;
}
public string name { get; set; }
public string identityNumber { get; set; }
}
class Program
{
static void Main(string[] args)
{
person Operson = new person ("ahamd" , "123453");
Console.WriteLine(Operson.print());
}
}
}
در این مثال با فراخوانی سازنده با پارامتر (parameterized constructor) در زمان تعریف شی (object) با نام Operson ، از آنجا که سازنده از نوع با پارامتر (parameterized constructor) است باید پارامتر های آن به آن ارسال شود. مقادیر ارسال شده با توجه به کد در بدنه سازنده (constructor) در دو متغیر name و identityNumber قرار می گیرد و در نتیجه با فراخوانی متد print ( که در ان مقادیر این متغیرها در کنار یکدیگر قرار می گیرند ) خروجی به صورت رو برو خواهد بود :
name=ahmad identityNumber=123453
Constructor overloading :
در مورد سازنده ها نیز مانند متد ها در سی شارپ که می توانیم چندین متد هم نام با پارامتر های متفاوت داشته باشیم ، می توان چندین سازنده با پارامتر های متفاوت (different method signature) و همین طور چندین سازنده با پارامتر و یک سازنده بدون پارامتر (default constructor) داشت.
مثال : تعریف چندین سازنده (constructor) در یک کلاس (class)
n
namespace ClassStatment
{
public class person
{
//default constructor
public person()
{
name = "test";
identityNumber = "1234667";
}
// parameterized constructor
public person(string personName, string IDNumber)
{
name = personName;
identityNumber = IDNumber;
}
public string name { get; set; }
public string identityNumber { get; set; }
public string print()
{
return "name=" + name + " " + " identityNumber=" + identityNumber;
}
}
class Program
{
static void Main(string[] args)
{
person Operson1 = new person ("ahamd" , "123453");
person Operson2 = new person();
Console.WriteLine(Operson1.print());
Console.WriteLine(Operson2.print());
}
}
}
در این مثال در کلاس person دو تا سازنده (constructor) وجود دارند که یکی بدون پارامتر است و دیگری دو تا پارامتر ورودی دارد در زمان تعریف شی (object) هر دو سازنده (constructor) می توانند فراخوانی شوند. و در نتیجه خروجی قطعه کد بالا به صورت زیر خواهد بود :
name=ahmad identityNumber=123453
name=test identityNumber=1234667
در مقاله بعدی در مورد بقیه انواع سازنده ها گفته خواهد شد.
گرد اوری : سمانه وزیریان
این فصل در یک نگاه:
آموزش ارسال پیامک، آموزش ارسال پیامک تکی و گروهی ، ارسال پیامک به صورت اختصاصی برای هر مشترک، دریافت پیامک، مشاهده وضعیت…
توضیحات کلی مجموعه: آیا می دونید قیمت نرم افزارهای مدیریت پیامک در حدود 150 هزار تومان است؟ اما توسط این دوره شما میتونید با مبلغ بسیار کمتر یک نرم افزار مدیریت پیامک رو به صورت کاملا حر…این فصل در یک نگاه:
در این فصل که فصل پایانی این دوره می باشد در مورد نحوه ساختن فایل نصبی سریع یا همان quick installer که روش پیشنهاد شده م…
توضیحات کلی مجموعه: پس از بازخوردهای بسیار خوبی که از دوره های آموزش برنامه نویسی سیستم اتوماسیون اداری و آموزش برنامه نویسی سیستم فروش و انبارداری مشاهده کردیم، تصمیم گرفتیم با توجه به درخ…این فصل در یک نگاه:
در این فصل که فصل آخر از مجموعه بزرگ آموزش سیستم اتوماسیون اداری می باشد در ابتدا در مورد اسناد و نامه های خارج از سازما…
دوره صفر تا صد آموزش برنامه نویسی و پیاده سازی سیستم اتوماسیون اداری تحت شبکه. (توصیه می شود دومی مجموعه را حتما ببینید) امروزه اطلاعات یکی از مهمترین و با ارزشترین منابع هر اداره و یا ساز…این فصل در یک نگاه:
توضیح تنظیمات گرافیک و صدا در یونیتی پیاده سازی منو ها …
به نام خدا بازیسازی یک حرفه بسیار جذاب است و تبدیل شدن به یک بازیساز حرفهای آرزوی همه ماست. اینکه بتوانیم دنیای خاصی خلق کنیم و در این دنیا قوانین خود را پیاده کنیم، همیشه ما را به وج…این فصل در یک نگاه:
اجرای سیستم روی سیستم، قرار دادن سیستم روی سرور، تعریف Connetion String، آشنایی با فایل App.config، ساخت رشته اتصال به ص…
مهمترین تکنولوژیهای استفاده شده در این دوره پروژه محور (سیستم فروش کالا و انبارداری) طراحی گرافیکی به روش WPF (Windows Presentaion Foundation) آموزش کامل برنامه نویسی xaml (برای طراحی های …این فصل در یک نگاه:
فصل پنجم…
توضیحات کلی مجموعه: درباره گیت: لذت پیش بردن پروژه های برنامه نویسی خود را با بهترین ورژن کنترل سیستم جهان تجربه کنید کامل ترین دوره ی آموزشی گیت و گیت هاب به همراه مثال های کاربردی گی…