دسته بندی ها
14:15 1401/02/14

Delegate ها در سی شارپ دقیقا کجا استفاده میشن ؟

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : سی شارپ C++

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 2655
4 نظر
mojtabahakimian : آیا هیچکس نظری داره ؟

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 00:12 1401/02/15
pedram_khan : منم یه مدت روی این موضوع تحقیق میکردم. آخرشم نفهمیدم دقیقا چیه و چه کاربردی داره

امتیاز کاربر : 277   رتبه کاربر : 6   تاریخ ثبت : 11:17 1401/02/15
gholamei : دوستان گرامی دلیگیت یک ویژگی کاملاً قدرتمند در سی شارپ هست و در واقع تمام Eventها یک نوع دلیگیت هستند یا نوع تکامل یافت دلیگیت به حساب می ایند. فرض کنید شما بخواهید برنامه ای بنویسید که حداقل 20 تا فرم داشته باشه و لازم باشه در هر ثانیه یک مقدار که معمولا از کاربر گرفته میشه در تمام این فرم ها فراخوانی بشه. بهترین راه استفاده از دلیگیت هست. بدون استفاده از دلیگیت شما مجبور هستید به شدت کدهای پیچیده تری بنویسد و کوچکترین تغییر در برنامه خیلی سخت باشه. دلیگیت در ابتدای یادگیری کمی پیچیده است اما بسیار قدرتمند و کاربردی است.

امتیاز کاربر : 0   رتبه کاربر : 7020   تاریخ ثبت : 08:37 1401/03/11
mojtabahakimian : mojtabahakimian : میشه لطفا مثال کامل و دقیق این رو بنویسید دلیگیت توی حالت خاص به کار میاد , خیلی از برنامه نویس های حرفه ای هم حتی با این موضوع آشنا نیستند , Pointer در ++C رو میدونند ولی این فرق میکنه

امتیاز کاربر : 155   رتبه کاربر : 10   تاریخ ثبت : 10:10 1401/03/12
ادامه نظرات ...
پاسخ دهنده : fateme 00:33 1401/02/16

ببین در واقع Delegate نوعی از تعریف تابع هست. یعنی یه خاصیتی نیست که استفاده از اون اجباری باشه. به هر حال مهندسین مایکروسافت این نوع از نگاه به توابع و متدها رو هم طراحی کردن.

 

Delegate در سی شارپ چیست ؟

delegate رو چند مدل میشه تعریف کرد. بستگی داره چجوری بهش نگاه کنید. وقتی شما متدی دارید که درون اون میخواید متدهای دیگه ای رو استفاده کنید و یا وقتی از یک متد به عنوان یک DataType در متدهای دیگه میخواید استفاده کنید.

ببین استفاده از delegate در واقع باعث انعطاف پذیری چارچوب ساختار پروژه شما میشه (البته اگر از پیچیدگی هایی که ایجاد میشه بتونید به سلامت عبور کنید!!) کلا مثال خوبی از استفاده از delegate تو نت نیست. اکثر سایتها اومدن یه سری توضیحات دادن و نهایتا یک مثال ساده زدن. کلا یه جور نگاه سطح بالا از برنامه نویسی و پیاده سازی توابع و متدهاست . بنظرم زیاد خودتو درگیرش نکن.

ویرایش شده در جمعه 16 اردیبهشت 1401 ساعت 00:34:58
به این پاسخ امتیاز بدهید    1
امتیاز: 1617 رتبه: 2
پاسخ دهنده : mojtabahakimian 03:51 1401/02/16

ممنونم.فکر میکنم در حالت عادی به این موضوع برخورد نمیکنیم, توی کار های خاص ممکنه به کار بیاد

ولی ظاهرا همون ref [variable] هست منتهی به جای متغیر میاد سراغ متد ها (توابع) چیزی که توی Pointer ها در C++ یا پاسکال هست.

 

این یه مثال عملیش هست که هدفش اینه که بتونیم از طریق LINQ شرطی رو برای Select خودمون به تابع Get (تابعی که خودمون ساختیم و در حالت عادی کل دیتا ها رو از دیتابیس میاره) بفرستیم :

public class GenericRepository<TEntity> where TEntity:class
   {
       private Accounting_DBEntities _db;
       private DbSet<TEntity> _dbSet;

       public GenericRepository(Accounting_DBEntities db)
       {
           _db = db;
           _dbSet = _db.Set<TEntity>();
       }
                                               //  LINQاستفاده از دلیگیت ها آماده سی شارپ برای ارسال 
       public virtual IEnumerable<TEntity> Get(Expression<Func<TEntity,bool>> where=null)
       {
           IQueryable<TEntity> query = _dbSet;

           if (where != null)
           {
               query = query.Where(where);
           }

           return query.ToList();
       }

       public virtual TEntity GetById(object Id)
       {
           return _dbSet.Find(Id);
       }

   }

 

نتیجه کار :

بازم برای خودم جا نیوفتاد که خودمون دقیقا چجوری میتونیم از Delegate بسازیم که بدرمون بخوره بیشتر فکر میکنم کد مون رو پیچیده تر میکنه 

به این پاسخ امتیاز بدهید    0
امتیاز: 155 رتبه: 10
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود