国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

.NET擴(kuò)展方法使用實例詳解

瀏覽:123日期:2022-06-08 14:23:31

擴(kuò)展方法有幾個必要前提:

  • 擴(kuò)展方法所在的類必須是靜態(tài)類
  • 擴(kuò)展方法本身必須是靜態(tài)方法
  • 擴(kuò)展方法參數(shù)中,對類型的擴(kuò)展參數(shù)前必須加this關(guān)鍵字

擴(kuò)展基本數(shù)據(jù)類型

針對DateTime類型寫一個擴(kuò)展方法。

    public static class CalculateAge    {public static int Age(this DateTime date, DateTime birthDate){    int birthYear = birthDate.Year;    int currentYear = DateTime.Now.Year;    if (birthYear >= currentYear)    {throw new Exception("請輸入正確的出生日期~~");    }    else    {return currentYear - birthYear - 1;    }}    }

客戶端調(diào)用。

    class Program    {static void Main(string[] args){    try    {Console.WriteLine("請輸入您的出生年份");DateTime d = Convert.ToDateTime(Console.ReadLine());DateTime dateInstance = new DateTime();int age = dateInstance.Age(d);Console.WriteLine("您當(dāng)前的年齡是:{0}", age);Console.ReadKey();    }    catch (Exception ex)    {Console.WriteLine(ex.Message);    }}    }

擴(kuò)展接口

有這樣的一個產(chǎn)品模型。

    public class Product    {public int Id { get; set; }public string Name { get; set; }    }

接口提供獲取產(chǎn)品集合的方法。

    public interface IProductService    {IEnumerable<Product> GetProducts();    }

接口有2個實現(xiàn)類。

    public class FoodProducts : IProductService    {public IEnumerable<Product> GetProducts(){    return new List<Product>    {new Product(){Id = 1, Name = "餅干"},new Product(){Id = 2, Name = "牛奶"}    };}    }    public class ElectronicProducts : IProductService    {public IEnumerable<Product> GetProducts(){    return new List<Product>    {new Product(){Id = 3, Name = "電風(fēng)扇"},new Product(){Id = 4, Name = "空調(diào)"}    };}    }

針對接口擴(kuò)展方法。

    public static class ProductServiceExtension    {public static IEnumerable<Product> GetProductsById(this IProductService productService, int id){    return productService.GetProducts().Where(p => p.Id == id);}    }

客戶端調(diào)用。

    class Program    {static void Main(string[] args){    IProductService productService = new FoodProducts();    Console.WriteLine("食物類別下總數(shù)量是;{0}", productService.GetProducts().Count());    try    {Console.WriteLine("找到的產(chǎn)品名稱是:{0}", (productService.GetProductsById(1).SingleOrDefault()).Name);    }    catch (Exception ex)    {Console.WriteLine(ex.Message);    }    Console.ReadKey();}    }

擴(kuò)展包含私有字段的類 使用反射獲取類的私有字段

擴(kuò)展一個類的時候,有時候會用到該類的私有字段,我們可以通過反射拿到類的私有字段。

有這樣的一個類,包含私有字段和公共方法。

    {private DateTime _currentTime;public void SetTime(){    _currentTime = DateTime.Now;}public string GetMsg(){    if (_currentTime.Hour < 12)    {return "上午好~~";    }    else    {return "下午好~~";    }}    }

我們希望擴(kuò)展出一個顯示英文信息的問候。

    public static class DisplayMessageExtensions    {public static string GetLocalMsg(this DisplayMessage message, string country){    //通過反射拿到私有字段    var privateField = typeof (DisplayMessage).GetField("_currentTime",BindingFlags.Instance | BindingFlags.NonPublic);    //獲取該私有字段的值    var currentDateTime = (DateTime)privateField.GetValue(message);    if (country == "USA" && currentDateTime.Hour < 12)    {return "Good Morning";    }    else    {return "Good Evening";    }}    }

客戶端調(diào)用。

    class Program    {static void Main(string[] args){    DisplayMessage displayMessage = new DisplayMessage();    displayMessage.SetTime();    Console.WriteLine("來自中國的問候是:{0}", displayMessage.GetMsg());    Console.WriteLine("美國人怎么問候?");    Console.WriteLine("來自美國的問候是:{0}", displayMessage.GetLocalMsg("USA"));    Console.ReadKey();}    }

擴(kuò)展一個類的私有嵌套類 通過反射

當(dāng)一個類有嵌套私有類的時候,擴(kuò)展該類的時候,有時候會用到該類的嵌套私有類,我們可以通過反射擴(kuò)展私有嵌套類。

有這樣的一個ParentClass類,包含一個私有嵌套類ChildClass.

    public class ParentClass    {public string MessageFromParent(){    return "from parent~~";}private class ChildClass{    public string MessageFromChild()    {return "from child~";    }}    }

現(xiàn)在要擴(kuò)展這個私有嵌套類,為其添加一個轉(zhuǎn)換成大寫的方法,通過反射來完成。

    public static class NestedClassExtension    {public static string ToUppeerCaseParentMessage(this ParentClass parent){    return parent.MessageFromParent().ToUpper();}public static string ToUpperCaseChildMessage(this object o){    var childUpper = "";    //通過反射獲取父類中的私有嵌套類    var privateClass = typeof (ParentClass).GetNestedType("ChildClass", BindingFlags.NonPublic);    if (o.GetType() == privateClass)    {//通過反射獲取嵌套私有類的方法var callMethod = privateClass.GetMethod("MessageFromChild");childUpper = (callMethod.Invoke(o, null) as string).ToUpper();    }    return childUpper;}    }

客戶端,首先通過反射獲取私有嵌套類的type類型,然后運用私有嵌套類的擴(kuò)展方法。

try{    ParentClass p = new ParentClass();    //通過反射獲取父類私有嵌套類    var privateClass = typeof (ParentClass).GetNestedType("ChildClass", BindingFlags.NonPublic);    //通過反射創(chuàng)建父類私有嵌套類的實例    var c = Activator.CreateInstance(privateClass);    //通過反射獲取父類私有嵌套類的方法    //var callMethod = privateClass.GetMethod("MessageFromChild");    Console.WriteLine(c.ToUpperCaseChildMessage());}catch (Exception ex){    Console.WriteLine(ex.Message);   }Console.ReadKey();

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

標(biāo)簽: ASP.NET
相關(guān)文章:
主站蜘蛛池模板: 午夜mm131美女做爰视频 | 91精品免费高清在线 | 在线视频久 | 12一15女人a毛片 | 中文字幕一区二区小泽玛利亚 | 爱啪网亚洲第一福利网站 | 日本三级视频在线 | 国产真实搭讪系列 | 手机看片精品高清国产日韩 | 国产成人毛片视频不卡在线 | 男人天堂亚洲 | 欧美精品久久久久久久免费观看 | 日韩美女专区中文字幕 | 久久亚洲精品成人 | 国产精品亚洲二线在线播放 | 美女三级黄| 99九九精品免费视频观看 | 久久毛片久久毛 | 亚洲男人天堂av | 久久亚洲精品中文字幕亚瑟 | 久久久久亚洲日日精品 | 久久99久久精品国产99热 | 美女扒开腿让男人桶爽免费动态图 | 老司机黄色影院 | 精品一区二区视频 | 特黄特色一级特色大片中文 | 亚洲日韩中文字幕 | 欧美成人激情在线 | 欧美激情视频一级视频一级毛片 | 草草影院www色极品欧美 | 俄罗斯一级毛片免费播放 | 免费播放美女一级毛片 | 手机在线毛片免费播放 | 国产肥老妇视频一 | 精品亚洲成a人在线观看 | 国内美女福利视频在线观看网站 | 欧美国产精品一区二区免费 | 色爱综合网 | 乱人伦中文视频在线观看免费 | 免费欧洲毛片a级视频无风险 | 美女张开腿让男人桶爽动漫视频 |