عنوان:

‫متدهای الحاقی - Extension Methods


نویسنده: علیرضا اسم‌رام
تاریخ: ۱۳۹۲/۰۱/۰۵ ۰:۳۵
آدرس: www.dntips.ir
چقدر خوب می‌شد اگر،
 
نوع داده String دارای متدی جهت حذف تگ‌های HTML داشت:
string htmlStr = "<h1>.Net Tips</h1>";
htmlStr.ClearHtmlTags();
کلاس Image دارای متدی جهت تغییر اندازه (Resize) داشت:
image1.Resize(50, 80);
کنترل DropDownList متدی جهت انقیاد داده‌ها داشت:
dropDownList1.Bind((List<Category>)categories, "Name", "Id");
متدهای الحاقی به همین منظور متولد شده اند. در واقع هر زمان بدنه کلاسی (نوع داده، کنترل و تمام اشیاء دات نتی) در اختیار ما نباشد امکان اضافه کردن متدهای الحاقی به آنها وجود دارد. برای این منظور کافیست چند نکته را رعایت کنید:
  1. کلاس دربرگیرنده متد یا متدهای الحاقی باید Public و Static باشد.
  2. متد الحاقی باید Public و Static باشد.
  3. اولین پارامتر متد الحاقی باید با کلمه کلیدی this همراه باشد و این پارامتر اشاره به کلاسی دارد که متد جاری به آن الحاق (یا ضمیمه) خواهد شد.
یک مثال:
در این مثال متدالحاقی برای بهبود نوع داده String را خواهیم دید. وظیفه‌ی این متد شمارش تعداد کلمات موجود در رشته است.
public static class StringExtensions
{

        /// <summary>
        /// Count all words in a given string
        /// </summary>
        /// <param name="input">string to begin with</param>
        /// <returns>int</returns>
        public static int WordCount(this string input)
        {
            var count = 0;
            try
            {
                // Exclude whitespaces, Tabs and line breaks
                var re = new Regex(@"[^\s]+");
                var matches = re.Matches(input);
                count = matches.Count;
            }
            catch (Exception)
            {
                return -1;
            }
            return count;
        }
}
نحوه استفاده:
var s = "i Love Dot Net Tips.";
var wordCount = s.WordCount();
در ضمن وب سایتی جهت به اشتراک گذاری این متدها به عنوان یکی از بهترین مراجع در دسترس است: http://extensionmethod.net 
با توجه به این مطلب توسعه پروژه ای در همین سایت با عنوان "متدهای الحاقی " آغاز شده است. در این پروژه ضمن پوشش متدهای الحاقی پرکاربرد سعی به توسعه متدهای الحاقی داریم که بیشتر در برنامه‌های فارسی کاربرد دارند.

نظرات

  • مهمان در ۱۳۹۲/۰۱/۰۵ ۰:۵۵
    ممنون. در صورت امکان لطفا آدرس مخزن کد را به صورت http://projectName.codeplex.com ارائه کنید.
    • علیرضا اسم‌رام در ۱۳۹۲/۰۱/۰۵ ۱:۵
      سلام. برداشت من از آدرس مخزن کد، آدرسی بود که دوستان بتوانند از طریق VisualStudio.NET روی توسعه این پروژه بنده را همراهی کنند.
      آدرس مورد نظر شما http://dntextensions.codeplex.com  است. اگر اشتباه برداشت کردم لطفاً بفرمایید تا آدرس را در پروژه اصلاح کنم.
      همچنین سوالات مربوط به پروژه را در بخش مربوط به آن +  مطرح کنید.
      با سپاس از لطف شما
      • وحید نصیری در ۱۳۹۲/۰۱/۰۵ ۱:۱۰
        بله. لطفا آدرس عمومی پروژه را لحاظ بفرمائید. با تشکر.
        • علیرضا اسم‌رام در ۱۳۹۲/۰۱/۰۵ ۱:۱۹
          با تشکر، اصلاح شد.
          • مهمان در ۱۳۹۲/۰۱/۰۵ ۱۵:۵۷
            من در زمان کانکت شدن به مخزن کد با خطای زیر مواجه می‌شوم. همچنین فقط کاربران عضو سایت می‌توانند همکاری کنند یا بازدیدکنندگان هم اجازه همکاری دارند؟
             Microsoft Visual Studio
            TF31002: Unable to connect to this Team Foundation Server: http://dntextensions.codeplex.com/.
            Team Foundation Server Url: http://dntextensions.codeplex.com/.
             
            
            Possible reasons for failure include:
            - The name, port number, or protocol for the Team Foundation Server is incorrect.
            - The Team Foundation Server is offline.
            - The password has expired or is incorrect.
            
            Technical information (for administrator):
            The remote server returned an error: (404) Not Found.
            • وحید نصیری در ۱۳۹۲/۰۱/۰۵ ۱۶:۴۲
              - این مورد مختص تمام سورس کنترلرها است. فقط اعضای تیم و اعضای تعریف شده دسترسی commit دارند.
              البته می‌تونید یک کپی فقط خواندنی با checkout مسیر https://dntextensions.svn.codeplex.com/svn تهیه کنید. روش کار در اینجا توضیح داده شده.
              و یا در همان سایت کدپلکس در قسمت سورس‌ها، آخرین سورس‌ها را دانلود کنید.
              + می‌تونید برای همکاری حداقل دو کار را انجام دهید:
              الف) وصله‌های خودتون رو در اینجا ارسال کنید.
              ب) و یا مواردی را که مدنظر دارید در سایت جاری در قسمت بازخوردهای پروژه مطرح کنید.
            • علیرضا اسم‌رام در ۱۳۹۲/۰۱/۰۵ ۲۳:۱۹
              سلام، توضیحات آقای نصیری کامل بود. همچنین اضافه کنم که دسترسی به سورس برنامه از طریق این لینک +  نیز میسر است.
              • مهمان در ۱۳۹۲/۰۱/۰۶ ۱۲:۲۰
                ممنون

                من سعی می‌کنم از روش هاش هایی که آقای نصیری گفتند همکاری کنم.

                با سپاس
  • میثم خوشقدم در ۱۳۹۲/۰۱/۰۶ ۱۳:۵۳

    سلام

    مشابه Class helper در دلفی است...

  • علی یگانه مقدم در ۱۳۹۵/۰۷/۲۸ ۲۰:۲۷
    با توجه به محبوبیت فعلی گیت هاب بسیار خوب هست که این پروژه برای همکاری بیشتر و بهتر در اونجا قرار بگیره