博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
泛型的where
阅读量:6293 次
发布时间:2019-06-22

本文共 1014 字,大约阅读时间需要 3 分钟。

泛型的Where能够对类型参数作出限定。有以下几种方式。

 

l         where T : struct   限制类型参数T必须继承自System.ValueType。

 

l         where T : class    限制类型参数T必须是引用类型,也就是不能继承自System.ValueType。

 

l         where T : new()   限制类型参数T必须有一个缺省的构造函数

 

l         where T : NameOfClass 限制类型参数T必须继承自某个类或实现某个接口。

 

以上这些限定可以组合使用,比如:

 

public class Point<T> where T : class, IComparable, new()

 

 

 

泛型的机制

 

l  机制: C#泛型代码在被编译为IL代码和无数据时,采用特殊的占位符来表示泛型类型,并用专有的IL指令支持泛型操作。而真正的泛型实例化工作以on-demand的方式,发生在JIT编译时。

 

l  编译机制:

 

1.第一轮编译时,编译器只为Stack<T>(栈算法)类型产生“泛型版”的IL代码与元数据-----并不进行泛型类型的实例化,T在中间只充当占位符

 

2. JIT编译时,当JIT编译器第一次遇到Stack<int>时,将用int替换“泛型版”IL代码与元数据中的T---进行泛型类型的实例化。CLR为所有类型参数为“引用类型”的泛型类型产生同一份代码;但如果类型参数为“值类型”,对每一个不同的“值类型”,CLR将为其产生一份独立的代码。

 

 

 

泛型的一些问题

 

l 不支持操作符重载。我只知道这么多了

 

 

 

范型的意义

 

泛型的意义何在?类型安全和减少装箱、拆箱并不是泛型的意义,而是泛型带来的两个好处而已(或许在.net泛型中,这是最明显的好处了)。泛型的意义在于 ——把类型作为参数,它实现了代码之间的很好的横向联系,我们知道继承为代码提供了一种从上往下的纵向联系,但泛型提供了方便的横向联系(从某种程度上说,它和AOP在思想上有相通之处)。在PersonCollection例子中,我们知道Add()方法和Remove()方法的参数类型相同,但我们明确无法告诉我们的程序这一点,泛型提供了一种机制,让程序知道这些。道理虽然简单,但这样的机制或许能给我们的程序带来一些深远的变化吧。

转载于:https://www.cnblogs.com/xiaocai0923/archive/2011/10/28/2227505.html

你可能感兴趣的文章
设计模式01:简单工厂模式
查看>>
项目经理笔记一
查看>>
Hibernate一对一外键双向关联
查看>>
mac pro 入手,php环境配置总结
查看>>
MyBatis-Plus | 最简单的查询操作教程(Lambda)
查看>>
rpmfusion 的国内大学 NEU 源配置
查看>>
spring jpa 配置详解
查看>>
IOE,为什么去IOE?
查看>>
Storm中的Worker
查看>>
dangdang.ddframe.job中页面修改表达式后进行检查
查看>>
Web基础架构:负载均衡和LVS
查看>>
Linux下c/c++相对路径动态库的生成与使用
查看>>
SHELL实现跳板机,只允许用户执行少量允许的命令
查看>>
SpringBoot 整合Redis
查看>>
2014上半年大片早知道
查看>>
Android 6.0指纹识别App开发案例
查看>>
正文提取算法
查看>>
轻松学PHP
查看>>
Linux中的网络监控命令
查看>>
this的用法
查看>>