استفاده از تابع this

استفاده از تابع this

نوشته شده توسط: محمد رضا موسائی سجزی
تاریخ انتشار: ۲۵ فروردین ۱۳۹۵
آخرین بروزرسانی: 17 تیر 1403
زمان مطالعه: 6 دقیقه
۱
(۱)

مقدمه

با سلام خدمت تمام دوستان نیک آموزی در اینجا قصد دارم در ابتدا به طرح یک سناریو پرداخته و سپس روشی را برای آن به شما معرفی نمایم.
سناریو: شاید برای شما دوستان پیش آمده باشد که در زبان  برنامه نویسی C#.Net برای یک کلاس چندین سازنده داشته باشید ( مفهوم سربارگذاری توابع) و در تمام یا برخی از سازنده ها قصد داشته باشید که یک سری از دستورات به صورت پیش فرض و مشترک انجام شوند احتمالا یکی از روش هایی که به ذهن شما می رسد این می باشد که دستورات مشترک در یک تابع در همان کلاس تعریف نمائید و در سازنده های مورد نظر فراخوانی نمائید در صورتی که می توان این امر را با استفاده از تابع this مرتفع گرداند.
 به قطعه کد زیر دقت نمائید.

{
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;
}
}
همانگونه که مشاهده می کنید مقدار دهی در تمام توابع سازنده تکرار شد است این دستورات می تواند مقدار دهی خصوصیات کلاس باشد یا یک سری دستور دیگر که در بهترین حالت می توان یک تابع عمومی نوشت و در آن تابع عمومی در این کلاس این عملیات را انجام داد. با توجه به قطعه کد بالا می توان آن را به صورتی که در زیر مشاهده می کنید تغییر داد. به تکه کد زیر دقت کنید.
 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;
/*
* وجود سایر دستورات مربوطه
*/
}
}

 همانگونه که ملاحظه می کنید بعد از پرانتز هر سازنده می توان با کلمه کلیدی this سازنده مورد نظر را فراخوانی نمود. این امر بیشتر برای نوشتن Component ها می تواند مورد استفاده قرار گیرد چرا که در ساخت یک Component شاید نیاز باشد تنظیمات اولیه در توابع سازنده تکرار شوند.

(شایان ذکر است در صورتی که برای سازنده ای نخواهید سازنده ای را فراخوانی نماید می توانید از تابع this برای آن سازنده استفاده ننمائید)
امیدوارم مطلب فوق، برای شما دوستان نیک آموزی مفید واقع شود.

چه رتبه ای می‌دهید؟

میانگین ۱ / ۵. از مجموع ۱

اولین نفر باش

گوش به زنگ یلدا
title sign
معرفی نویسنده
محمد رضا موسائی سجزی
مقالات
1 مقاله توسط این نویسنده
محصولات
0 دوره توسط این نویسنده
محمد رضا موسائی سجزی
title sign
دیدگاه کاربران

    •     سلام

      تشکر به خاطر  مقاله 

      • با سلام خدمت دوستم ali ممنون از اینکه تا آخر مطلب را خوندید و نظر خود را اعلام کردید

    •    متشکرم توضیح خوب و کاربردی بود

      • با سلام خدمت دوستم aliakbarfire ممنون از اینکه تا آخر مطلب را خوندید و نظر خود را اعلام کردید

    • با سلام خدمت دوست عزیز آقای حسین خوش رفتار منفرد، از آنجا که هر کلاس دارای یک تابع سازنده می باشد از این رو به هر صورت منجر به فراخوانی تابع سازنده در همان کلاس جاری در زمان ساخت شی از آن کلاس شویم ارجاعی به سایر توابع سازنده می باشد و بعد از مشاهده پست شما من مرجع خود که کتاب های Microsoft می باشد را مجددا مطالعه نمودم و متوجه این اشتباه در عنوان مقاله شدم از شما و سایر دوستان که دقت فراوانی در این امر داشتید تشکر فراوانی دارم.
      باز از دقت شما کمال تشکر را دارم
    •  سلام

      بنده هم با نظر دوستمون آقای منفرد کاملاً موافقم.
      •  سلام دوست عزیز آقای اکبری ، بله مطلب و نظر ایشان کاملا درست و به جا می باشد.

    •     سلام. از زحمتی که کشیدید ممنونم. اما this یک تابع یا متد نیست بلکه یک متغیر ارجاعی است.

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

      •     دوست خوبم آقای مجتبی شهریور کاربرد اصلی این پست در نوشتن کامپوننت ها می باشد.

    •    سلام.
      عالی بود مرسی از مقاله خوبتون

      •   ابراهیم جان خواهش میکنم از شما هم سپاس فراوان که این مطلب را خواندید.