c# 泛型学习

Posted andonglu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c# 泛型学习相关的知识,希望对你有一定的参考价值。

.net 从2.0开始支持泛型。泛型可以帮助我们创建独立于被包含类型的类和方法。

不必再为不同类型编写功能相同的方法或类了,只要创建一个泛型类或者方法就可以实现对多种数据类型的操作。

object类型虽然也能让你实现这样的功能,但它不是类型安全的。

泛型不仅是c#语言的一种结构,而且是CLR定义的。所以,在c#中定义的泛型类,也可以在vb中用一个特定的类型实例化该泛型。

object实现与泛型实现 

 

   static void Main(string[] args)
        
            //System.Collections命名空间下面的ArrayList类,存储的是对象
            //Add()方法,添加值类型数据时,需要将参数装箱,转为object类型,在访问数据时,需要将
            //数据进行拆箱,要进行强制转换。
            var list = new ArrayList();
            list.Add(44);
            int i1 = (int)list[0];
            foreach (int item in list)
            
                Console.WriteLine(item);
            
            //System.Collections.Generic命名空间下面的List<T>,是一个泛型类。
            //类型定义为int,所以int类型在jit编译器动态生成的类中使用,编译之后生成新的类型。这个类型就是接受int参数的一个类型
            //不再进行拆箱和装箱。
            //
            var ilist = new List<int>();
            ilist.Add(44);
            int i2 = ilist[0];
            foreach (var item in ilist)
            
                Console.WriteLine(item);
            

         
            Console.ReadKey();
        

技术图片

 

 如果加入如下两行代码:

     list.Add("hello");
               ilist.Add("hello");

使用泛型时,编译不能通过;

而使用object时,编译可以通过,不过在访问数据时,装箱拆箱会报异常。

所以泛型相对于object,是类型安全的,性能也更优。

 

以上是关于c# 泛型学习的主要内容,如果未能解决你的问题,请参考以下文章

C#泛型学习

C#学习:通过反射设置泛型类型的属性及值

unity的C#学习——泛型的创建与继承泛型集合类泛型中的约束和反射

C#学习笔记---基础入门

关于学习C#泛型委托过程中发现的一些疑惑,大家一起讨论下

C#学习中遇到的问题: 判断泛型变量是否未赋值(未解决)