با سلام خدمت تمام دوستان نیک آموزی در اینجا قصد دارم در ابتدا به طرح یک سناریو پرداخته و سپس روشی را برای آن به شما معرفی نمایم.
سناریو: شاید برای شما دوستان پیش آمده باشد که در زبان برنامه نویسی C#.Net برای یک کلاس چندین سازنده داشته باشید ( مفهوم سربارگذاری توابع) و در تمام یا برخی از سازنده ها قصد داشته باشید که یک سری از دستورات به صورت پیش فرض و مشترک انجام شوند احتمالا یکی از روش هایی که به ذهن شما می رسد این می باشد که دستورات مشترک در یک تابع در همان کلاس تعریف نمائید و در سازنده های مورد نظر فراخوانی نمائید در صورتی که می توان این امر را با استفاده از تابع this مرتفع گرداند.
به قطعه کد زیر دقت نمائید.
[csharp] public class Emploee
{
public Int64 Emp_Number { get; set; }
public string Emp_Name { get; set; }
public string Emp_Family { get; set; }
public DateTime Emp_Birthdate { get; set; }
public string Emp_Address { get; set; }
public bool Emp_Gender { get; set; }
public Emploee(Int64 emp_Number)
{
this.Emp_Number = emp_Number;
}
public Emploee(Int64 emp_Number, string emp_Name, string emp_Family)
{
this.Emp_Number = emp_Number;
this.Emp_Name = emp_Name;
this.Emp_Family = emp_Family;
}
public Emploee(Int64 emp_Number, string emp_Name, string emp_Family,
DateTime emp_Birthdate, string emp_Address, bool emp_Gender)
{
this.Emp_Number = emp_Number;
this.Emp_Name = emp_Name;
this.Emp_Family = emp_Family;
this.Emp_Birthdate = emp_Birthdate;
this.Emp_Address = emp_Address;
this.Emp_Gender = emp_Gender;
}
} [/csharp]
|
همانگونه که مشاهده می کنید مقدار دهی در تمام توابع سازنده تکرار شد است این دستورات می تواند مقدار دهی خصوصیات کلاس باشد یا یک سری دستور دیگر که در بهترین حالت می توان یک تابع عمومی نوشت و در آن تابع عمومی در این کلاس این عملیات را انجام داد. با توجه به قطعه کد بالا می توان آن را به صورتی که در زیر مشاهده می کنید تغییر داد. به تکه کد زیر دقت کنید.
[csharp] public class Emploee
{
public Int64 Emp_Number { get; set; }
public string Emp_Name { get; set; }
public string Emp_Family { get; set; }
public DateTime Emp_Birthdate { get; set; }
public string Emp_Address { get; set; }
public bool Emp_Gender { get; set; }
public Emploee(Int64 emp_Number)
{
this.Emp_Number = emp_Number;
/*
* وجود سایر دستورات مربوطه
*/
}
public Emploee(Int64 emp_Number, string emp_Name, string emp_Family)
:this(emp_Number)
{
this.Emp_Name = emp_Name;
this.Emp_Family = emp_Family;
/*
* وجود سایر دستورات مربوطه
*/
}
public Emploee(Int64 emp_Number, string emp_Name, string emp_Family,
DateTime emp_Birthdate, string emp_Address, bool emp_Gender)
: this(emp_Number, emp_Name, emp_Family)
{
this.Emp_Birthdate = emp_Birthdate;
this.Emp_Address = emp_Address;
this.Emp_Gender = emp_Gender;
/*
* وجود سایر دستورات مربوطه
*/
}
} [/csharp]
|
همانگونه که ملاحظه می کنید بعد از پرانتز هر سازنده می توان با کلمه کلیدی this سازنده مورد نظر را فراخوانی نمود. این امر بیشتر برای نوشتن Component ها می تواند مورد استفاده قرار گیرد چرا که در ساخت یک Component شاید نیاز باشد تنظیمات اولیه در توابع سازنده تکرار شوند.
(شایان ذکر است در صورتی که برای سازنده ای نخواهید سازنده ای را فراخوانی نماید می توانید از تابع this برای آن سازنده استفاده ننمائید)
امیدوارم مطلب فوق، برای شما دوستان نیک آموزی مفید واقع شود.
12 دیدگاه
ابراهیم
سلام.
عالی بود مرسی از مقاله خوبتون
محمد رضا موسائی سجزی
ابراهیم جان خواهش میکنم از شما هم سپاس فراوان که این مطلب را خواندید.
مجتبی شهریور
سلام
ممنونم از مقاله خوبتون ولی ای کاش یه کم کاربردی تر موضوع را باز می فرمودین..
متشکرم
محمد رضا موسائی سجزی
دوست خوبم آقای مجتبی شهریور کاربرد اصلی این پست در نوشتن کامپوننت ها می باشد.
حسین خوش رفتار منفرد
سلام. از زحمتی که کشیدید ممنونم. اما this یک تابع یا متد نیست بلکه یک متغیر ارجاعی است.
فرشید علی اکبری
سلام
محمد رضا موسائی سجزی
سلام دوست عزیز آقای اکبری ، بله مطلب و نظر ایشان کاملا درست و به جا می باشد.
محمد رضا موسائی سجزی
علی اکبر شعبانی
متشکرم توضیح خوب و کاربردی بود
محمد رضا موسائی سجزی
با سلام خدمت دوستم aliakbarfire ممنون از اینکه تا آخر مطلب را خوندید و نظر خود را اعلام کردید
ali
سلام
تشکر به خاطر مقاله
محمد رضا موسائی سجزی
با سلام خدمت دوستم ali ممنون از اینکه تا آخر مطلب را خوندید و نظر خود را اعلام کردید