خانه زبان های برنامه نویسی استفاده از تابع this زبان های برنامه نویسی سی شارپ نوشته شده توسط: محمد رضا موسائی سجزی تاریخ انتشار: ۲۵ فروردین ۱۳۹۵ آخرین بروزرسانی: ۱۷ تیر ۱۴۰۳ زمان مطالعه: 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 برای آن سازنده استفاده ننمائید) امیدوارم مطلب فوق، برای شما دوستان نیک آموزی مفید واقع شود. چه رتبه ای میدهید؟ میانگین ۱ / ۵. از مجموع ۱ اولین نفر باش معرفی نویسنده مقالات 1 مقاله توسط این نویسنده محصولات 0 دوره توسط این نویسنده محمد رضا موسائی سجزی معرفی محصول علیرضا ارومند آموزش برنامه نویسی سی شارپ - Jet Start 390.000 تومان مقالات مرتبط ۱۰ آبان زبان های برنامه نویسی عملکرد کتابخانه Turtle در پایتون و کاربرد های آن ۰۸ آبان زبان های برنامه نویسی Migration در لاراول چیست و چه کاربردهایی دارد؟ تیم فنی نیک آموز ۰۷ آبان زبان های برنامه نویسی مفهوم SDK در برنامه نویسی اندروید چیست؟ تیم فنی نیک آموز ۰۱ آبان زبان های برنامه نویسی HierarchyId در Ef Core 8؛ کامل ترین آموزش برای مدیریت دیتاهای ساختار یافته تیم فنی نیک آموز دیدگاه کاربران لغو پاسخ دیدگاه نام و نام خانوادگی ایمیل ذخیره نام، ایمیل و وبسایت من در مرورگر برای زمانی که دوباره دیدگاهی مینویسم. موبایل برای اطلاع از پاسخ لطفاً مرا با خبر کن ثبت دیدگاه Δ ali ۲۷ / ۰۴ / ۹۵ - ۰۹:۲۴ سلام تشکر به خاطر مقاله پاسخ به دیدگاه محمد رضا موسائی سجزی ۰۱ / ۰۵ / ۹۵ - ۰۸:۵۰ با سلام خدمت دوستم ali ممنون از اینکه تا آخر مطلب را خوندید و نظر خود را اعلام کردید پاسخ به دیدگاه aliakbarfire@gmail.com ۱۲ / ۰۴ / ۹۵ - ۰۰:۲۳ متشکرم توضیح خوب و کاربردی بود پاسخ به دیدگاه محمد رضا موسائی سجزی ۰۱ / ۰۵ / ۹۵ - ۰۸:۳۰ با سلام خدمت دوستم aliakbarfire ممنون از اینکه تا آخر مطلب را خوندید و نظر خود را اعلام کردید پاسخ به دیدگاه محمد رضا موسائی سجزی ۰۲ / ۰۲ / ۹۵ - ۰۱:۵۵ با سلام خدمت دوست عزیز آقای حسین خوش رفتار منفرد، از آنجا که هر کلاس دارای یک تابع سازنده می باشد از این رو به هر صورت منجر به فراخوانی تابع سازنده در همان کلاس جاری در زمان ساخت شی از آن کلاس شویم ارجاعی به سایر توابع سازنده می باشد و بعد از مشاهده پست شما من مرجع خود که کتاب های Microsoft می باشد را مجددا مطالعه نمودم و متوجه این اشتباه در عنوان مقاله شدم از شما و سایر دوستان که دقت فراوانی در این امر داشتید تشکر فراوانی دارم. باز از دقت شما کمال تشکر را دارم پاسخ به دیدگاه فرشید علی اکبری ۳۱ / ۰۱ / ۹۵ - ۰۲:۱۳ سلام بنده هم با نظر دوستمون آقای منفرد کاملاً موافقم. پاسخ به دیدگاه محمد رضا موسائی سجزی ۰۲ / ۰۲ / ۹۵ - ۰۱:۲۰ سلام دوست عزیز آقای اکبری ، بله مطلب و نظر ایشان کاملا درست و به جا می باشد. پاسخ به دیدگاه حسین خوش رفتار منفرد ۲۹ / ۰۱ / ۹۵ - ۱۱:۳۳ سلام. از زحمتی که کشیدید ممنونم. اما this یک تابع یا متد نیست بلکه یک متغیر ارجاعی است. پاسخ به دیدگاه مجتبی شهریور ۲۹ / ۰۱ / ۹۵ - ۰۹:۳۶ سلامممنونم از مقاله خوبتون ولی ای کاش یه کم کاربردی تر موضوع را باز می فرمودین..متشکرم پاسخ به دیدگاه محمد رضا موسائی سجزی ۰۲ / ۰۲ / ۹۵ - ۰۱:۱۲ دوست خوبم آقای مجتبی شهریور کاربرد اصلی این پست در نوشتن کامپوننت ها می باشد. پاسخ به دیدگاه ابراهیم ۲۸ / ۰۱ / ۹۵ - ۰۳:۳۴ سلام.عالی بود مرسی از مقاله خوبتون پاسخ به دیدگاه محمد رضا موسائی سجزی ۰۲ / ۰۲ / ۹۵ - ۱۲:۲۵ ابراهیم جان خواهش میکنم از شما هم سپاس فراوان که این مطلب را خواندید. پاسخ به دیدگاه