Extension Methods
· آیا به کلاس های sealed می توان تابعی افزود ؟
· چگونه می توان یک تابع را به هر نوع کلاسی اضافه کرد ؟
· آیا می توان یک کلاس را در خارج از بدنه کلاس تعمیم و یا این کار را در فضای نام همان کلاس یا خارج از آن انجام داد؟
جواب این پرسش ها در Extension Methods می باشد
قبل از C# 3.0 فقط میشد یک کلاس را از طریق ارثبری از آن توسعه داد اما حالا اکنون میتوان با متد های توسعه این کار را انجام داد
توابع تعمیم یافته به اعضاء خصوصی کلاسی که تعمیم مییابد، دسترسی ندارند.
شکل کلی توابع تعمیم یافته :
public static class ExtendingClassName { public static ReturnType MethodName(this ExtendedMethod arg) { //دستورات درون متد Return ReturnType; } }
توجه کنید که:
1. کلاس توسعهدهنده و تابع توسهدهنده باید استاتیک باشند.
2. در داخل آرگومان تابع، کلمه کلیدی this استفاده میشود.
3. بعد از this عنوان کلاسی که قصد توسعه آن را داریم، ذکر میکنیم.
4. در هرجا که خواستیم از قابلیت تعمیم داده شده استفاده کنیم باید فضای نام مربوط به آن را ذکر کنیم.
5. با کلمه کلیدی static نمیتوان کلاسی با متدهایvirtual ، abstract و override را توسعه داد.
public static class ExtendingString { public static string AddPrefix(this string arg, string prefix) { return String.FormatFormat("{0}{1}", prefix, arg); } }
|
//call method var s = "Student"; Console.WriteLine(s.AddPrefix("tbl"));
|
// خروجی tblStuden |
http://csharp.net-tutorials.com/csharp-3.0/extension-methods/