C# 泛型入门讲解 泛型在系统架构中无处不在

 

 

提到泛型,我们会想起List<T>泛型集合,其中的T就是泛型,任何满足T的泛型约束的类,皆可使用;

 

 

泛型集合是我们平常编码中最常用的泛型的使用例子之一,那么泛型是如何出现的,他又是如何被用在实际开发工作中的呢?

 

 

先来看看这段代码:

 

public class Test
    {
        public string GetClassType(int i)
        {
            return "此類型為:"+ i.GetType();
        }
        public string GetClassType(string str)
        {
            return "此類型為:" + str.GetType();
        }
        public string GetClassType(bool bl)
        {
            return "此類型為:" + bl.GetType();
        }
    }

 

调用:

 

 class Program
    {
        static void Main(string[] args)
        {
            Test test = new Test();
            Console.WriteLine(test.GetClassType(1));
            Console.WriteLine(test.GetClassType("1"));
            Console.WriteLine(test.GetClassType(true));
            Console.Read();
        }
    }

 


是否发现特别别扭呢,明明Test类中的方法除了参数不同其他完全一样,但是却要写三个方法,作为高级语言,C#是不会让开发者编写如此臃肿的代码的,高级语言都是爱美的!

 

 

在.NET Framework1.0刚出来的时候,就有人想过这个问题了,于是大家想到了用object类,来作为参数,由于面向对象的三大特性,封装、继承、多态,利用继承,任何父类出现的地方都可以用子类来代替,而我们知道Object作为万类之父,于是乎,此种写法合情合理的出现:

 

  public string GetClassType(object obj)
        {
            return "此類型為:" + obj.GetType();
        }

 


调用:test.GetClassType(),分别把int,string,bool类型的参数传进去,运行结果一致

 

 

 

 

 

完美解决问题,当然其中是存在问题的,问题就是:装箱拆箱,值类型和引用类型,在这之中进行了装箱拆箱操作,对于这种仅仅是为了代码好看而去损耗性能的问题,微软不会坐视不管的,2.0版本,泛型出世:

 

 public string GetClassType<T>(T t)
        {
            return "此類型為:" + t.GetType();
        }

 

 

 

运行结果完全一致,其中T就是你所传过来的参数的类型,T在<T>此处声明
调用时代码完全一样;

 

 

泛型的本质:是2.0框架升级,CLR升级带来的全新的语法,这一点利用反编译工具即可看出来,T在IL语法里面是一个占位符,之前我误认为是编译器的语法糖,这是一个错误观点,在此更正!

在系统架构时,泛型无处不在,可以把多个方法整合到一起,本例只是泛型的最简单的运用,当泛型加上约束,将更加强大,此例中的T,只有objec最原始的几个方法,如果我们来了一个自定义的类,想获取其中的属性方法等,就必须加上约束了,有了约束才更强,泛型成了优秀项目开发过程中,不可缺少的存在!


  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值