最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#中泛型類和擴(kuò)展方法如何使用

 更新時(shí)間:2022年10月22日 10:55:28   作者:Darren Ji  
這篇文章介紹了C#中泛型類和擴(kuò)展方法的用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

我們經(jīng)常通過泛型構(gòu)造函數(shù)創(chuàng)建泛型實(shí)例,也常調(diào)用實(shí)例的擴(kuò)展方法。以下的代碼在項(xiàng)目中隨處可見:

        static void Main(string[] args)
        {
            var strs = new List<string> {"hello","world"};
            var result = strs.Where(s => s.StartsWith("h"));
            foreach (var item in result)
            {
                Console.WriteLine(item);
            }
            Console.ReadKey();
        }

以上,

  • 通過泛型集合List<T>的構(gòu)造函數(shù)創(chuàng)建了實(shí)例,內(nèi)部是如何實(shí)現(xiàn)的呢?
  • 對實(shí)例變量strs采用Where方法,我們發(fā)現(xiàn)Where也足夠”聰明”,因?yàn)樗轻槍Enumerable集合類型的擴(kuò)展方法。

.NET內(nèi)部到底是如何實(shí)現(xiàn)的呢?不妨臨摹一下~~

創(chuàng)建一個(gè)類型泛型。

    public class MyCute<T>
    {
        public MyCute(T t)
        {
            GetCute = t;
        }
        public T GetCute { get; set; }
    }

在客戶端這樣調(diào)用:

        static void Main(string[] args)
        {
            var cuteInt = new MyCute<int>(10);
            var cuteStr = new MyCute<string>("hello");
            Console.WriteLine(cuteInt.GetCute);
            Console.WriteLine(cuteStr.GetCute);
            Console.ReadKey();
        }

以上,或許得到的啟示是:如果想通過構(gòu)造函數(shù)創(chuàng)建泛型實(shí)例,需要定義一個(gè)泛型類,一個(gè)泛型類型的屬性,一個(gè)把泛型類型作為參數(shù)的構(gòu)造方法。

現(xiàn)在想對泛型實(shí)例cuteInt和cuteStr的屬性GetCute使用擴(kuò)展方法,如何做呢?

cuteInt的屬性GetCute是int類型,cuteStr的屬性GetCute是string類型,兩者的共同基類是object,那就針對object類型寫一個(gè)擴(kuò)展方法。

    public static class MyHelper
    {
        public static string GetStr(this object obj)
        {
            return obj.ToString() + "--added string";
        }
    }

客戶端變成這樣:

        static void Main(string[] args)
        {
            var cuteInt = new MyCute<int>(10);
            var cuteStr = new MyCute<string>("hello");
            Console.WriteLine(cuteInt.GetCute.GetStr());
            Console.WriteLine(cuteStr.GetCute.GetStr());
            Console.ReadKey();
        }

總結(jié):

  • 如果針對不同類型的操作邏輯是一樣的,就可以抽象出一個(gè)泛型類。泛型類和普通類沒有本質(zhì)的區(qū)別,只不過在類名稱后面多了一個(gè)占位符、或者叫類型參數(shù),泛型類的構(gòu)造函數(shù)參數(shù)是類型參數(shù),泛型類的屬性類型也是類型參數(shù)。
  • 如果針對不同類型實(shí)例的操作邏輯是一樣的,就可以針對不同實(shí)例類型的共同父類或接口寫一個(gè)擴(kuò)展方法。

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

相關(guān)文章

最新評論

蓬溪县| 运城市| 江陵县| 合肥市| 鄯善县| 山丹县| 巩义市| 肃北| 湖北省| 鲁山县| 井陉县| 玉溪市| 涞源县| 井陉县| 喜德县| 昌乐县| 永定县| 浮梁县| 阜城县| 娄底市| 金寨县| 同江市| 揭阳市| 钟山县| 东乌| 天镇县| 合山市| 格尔木市| 仁寿县| 屏东市| 鞍山市| 祁门县| 辽源市| 克山县| 乡宁县| 哈尔滨市| 墨江| 宜兴市| 石台县| 怀远县| 孝义市|