- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
DEV 331深度探索 Microsoft Visual C# 2.0 付仲恺 微软特邀开发专家 C# 2.0增强 范型(Generics) 匿名方法(Anonymous methods) 可为空类型(Nullable types) 迭代器(Iterators) 局部类型(Partial types) 等等 100%向后兼容 范型(Generics) 范型(Generics) 为什么需要范型? 类型检查,不进行拆箱和类型强制转换 增加了代码重用机会(类型集合) C#如何实现范型? 在运行时实例化,而不是编译时 类型检查在声明时,而不是实例化时进行 同时支持引用和值类型 完整的运行时类型信息 范型(Generics) 类型参数能够被应用于: 类,结构体,接口,委托类型 范型(Generics) 类型参数能够被应用于: 类,结构体,接口,委托类型 方法 范型(Generics) 类型参数能够被应用于: 类,结构体,接口,委托类型 方法 类型参数能够具有约束 范型(Generics) 只允许有一个基本约束 实际类,或者结构体 可以有多个次要约束 接口或者类型参数 可以有一个构造约束 new() 范型(Generics) default(T) 类型转换 Null检查 范型(Generics) 集合类 集合接口 集合基本类 工具类 反射 匿名方法(Anonymous Methods) 匿名方法(Anonymous Methods) 代码块替代委托方法 自动推断委托类型 代码块可以忽略参数列表 匿名方法(Anonymous Methods) 支持Closures 匿名方法(Anonymous Methods) 方法组转换 在可能的情况下,推断出委托类型 可为空类型(Nullable Types) System.NullableT 为所有值类型提供可为空的能力 具有类型T和布尔值的结构体 Nullable Types T? 语法 null 赋值 不同类型转换 Lifted操作符 Null结合运算符 迭代器(Iterators) foreach依赖于“枚举模式” GetEnumerator() 方法 foreach使得枚举变得更加方便 但是枚举器的实现难度加大了! 迭代器(Iterators) 迭代器(Iterators) 方法递增计算并且返回一系列数值 yield return和yield break 必须返回IEnumerator或者IEnumerable 迭代器(Iterators) 局部类型(Partial Types) 静态类(Static Classes) 只有静态成员 不能被用于变量,参数,域,属性等类型 例如:System.Console,System.Environment 属性访问器(Property Accessors) 不同的访问器访问权限 访问器能够被严格限制 一般来说,set{…}的权限更加严格 外部别名(External Aliases) 在不同的程序集中使用相同的命名类型 命名空间别名修饰符(Namespace Alias Qualifiers) 版本上更加有弹性的代码 A::B仅将A作为别名 global::X作为全局命名空间 内联警告控制(Inline Warning Control) #pragma warning 固定大小缓冲区(Fixed Size Buffers) 在非安全代码中的C语言风格数组 public struct OFSTRUCT { public byte cBytes; public byte fFixedDisk; public short nErrCode; private int Reserved; public fixed char szPathName[128]; } public class List { private object[] elements; private int count; public void Add(object element) { if (count == elements.Length) Resize(count * 2); elements[count++] = element; } public object this[int index] { get { return elements[index]; } set { elements[index] = value; } } public int Count { get { return count;
文档评论(0)