文章分类 - 学习笔记
摘要:ENUMERATORS By using the foreach statement you can iterate elements of a collection (see Chapter 10) without needing to know the number of elements in
阅读全文
摘要:Prior to .NET 4, generic interfaces were invariant. .NET 4 added important changes for generic interfaces and generic delegates: covariance and contra
阅读全文
摘要:1.1 选择技术 1.2 回顾.NET历史 .NET Framework的版本、对应的公共语言运行库(Common Language Runtime,CLR)的版本、C#的版本以及Visual Studio的版本 .NET Framework CLR C# Visual Studio 1.0 1.0
阅读全文
摘要:1 数字分隔符 数字分隔符使代码更具可读性。在声明变量时可以给单独的数字添加_。编译器只是删除_。 在C# 7.2中,也可以把“_”放在开头。 数字分隔符在第2章介绍。 2 二进制字面值 C# 7为二进制提供了一个新的字面值。二进制的值只能是0和1。 二进制字面值在第2章介绍。 3 表达式体的成员
阅读全文
摘要:System.Nullable<T> 可以看出,该结构能表示可为null的值类型。由于Nullable<D>本身是值类型,所以它的实例仍然是“轻量级”的。也就是说,实例仍然可以在栈上,而且实例的大小和原始值类型基本一样,只是多了一个Boolean字段。注意Nullable的类型参数T被约束为stru
阅读全文
摘要:18.1 使用定制特性 关于自定义特性,首先要知道它们只是将一些附加信息与某个目标元素关联起来的方式。 .NET Framework类库(FCL)定义的定制特性 将DIllmport特性应用于方法,告诉CLR该方法的实现位于指定DLL的非托管代码中。 将Serializable特性应用于类型,告诉序
阅读全文
摘要:Microsoft.NET Framework 通过委托来提供回调函数机制. 17.1 初识委托 NET Framework的回调函数和非托管Windows编程环境的回调函数一样有用,一样普遍。但是,.NET Framework提供了称为委托的类型安全机制。 17.2 用委托回调静态方法 在一个类型
阅读全文
摘要:所有数组类型都隐式地从System.Array抽象类派生,后者又派生自System.Object,这意味着数组始终是引用类型,是在托管堆上分配的。在应用程序的变量或字段中,包含的是对数组的引用,而不是包含数组本身的元素。 第一行代码声明myIntegers变量,它能指向包含Int32值的一维数组。m
阅读全文
摘要:15.1 枚举类型 枚举类型(enumerated type)定义了一组“符号名称/值”配对。 不应将这些数字硬码到代码中,而应使用枚举类型,理由至少有二。 枚举类型使程序更容易编写、阅读和维护。 枚举类型是强类型的。 每个枚举类型都直接从System.Enum派生,后者从System.ValueT
阅读全文
摘要:14.1 字符 在NET Framework中,字符总是表示成16位Unicode代码值,这简化了国际化应用程序的开发。每个字符都是System.Char结构(一个值类型)的实例。System.Char类型很简单,提供了两个公共只读常量字段:MinValue(定义成'\0')和MaxValue(定义
阅读全文
摘要:13.1 类和接口继承 Microsoft NET Framework提供了System.Object类,它定义了4个公共实例方法:ToString,Equals,GetHashCode和GetType.该类是其他所有类的根或者说终极基类。 由于Microsoft的开发团队已实现了Object的方法
阅读全文
摘要:泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”。 简单地说,开发人员先定义好算法,比如排序、搜索、交换、比较或者转换等。但是,定义算法的开发人员并不设定该算法要操作什么数据类型;该算法可广泛地应用于不同类型的对象。然后,另一个开发人员只要指定了
阅读全文
摘要:定义了事件成员的类型能提供以下功能。 方法能登记它对事件的关注。 方法能注销它对事件的关注。 事件发生时,登记了的方法将收到通知。 类型之所以能提供事件通知功能,是因为类型维护了一个已登记方法的列表。事件发生后,类型将通知列表中所有已登记的方法。 CLR事件模型以委托为基础。委托是调用(在英语的语境
阅读全文
摘要:属性,它允许源代码用简化语法来调用方法。 CLR支持两种属性:无参属性,平时说的属性就是指它; 有参属性,它在不同的编程语言中有不同的称呼。例如,C将有参属性称为索引器。 10.1 无参属性 许多类型都定义了能被获取或更改的状态信息。这种状态信息一般作为类型的字段成员实现。 面向对象设计和编程的重要
阅读全文
摘要:9.1 可选参数和命名参数 设计方法的参数时,可为部分或全部参数分配默认值。然后,调用这些方法的代码可以选择不提供部分实参,使用其默认值。此外,调用方法时可通过指定参数名称来传递实参。 9.1.1 规则和原则 如果在方法中为部分参数指定了默认值 可为方法、构造器方法和有参属性(C#索引器)的参数指定
阅读全文
摘要:8.1 实例构造器和类(引用类型) 构造器是将类型的实例初始化为良好状态的特殊方法。构造器方法在“方法定义元数据表”中始终叫做.ctor(constructor的简称),创建引用类型的实例时,首先为实例的数据字段分配内存,然后初始化对象的附加字段(类型对象指针和同步块索引),最后调用类型的实例构造器
阅读全文
摘要:7.1常量 常量是值从不变化的符号。 定义常量符号时,它的值必须能在编译时确定。确定后,编译器将常量值保存到程序集元数据中。这意味着只能定义编译器识别的基元类型的常量。 在C#中,以下类型是基元类型,可用于定义常量:Boolean,Char,Byte,SByte,Int16,UInt16,Int32
阅读全文
摘要:6.1 类型的各种成员 常量 常量是指出数据值恒定不变的符号。这种符号使代码更易阅读和维护。常量总与类型关联,不与类型的实例关联。常量逻辑上总是静态成员。相关内容在第7章“常量和字段"讨论。 字段 字段表示只读或可读/可写的数据值。字段可以是静态的:这种字段被认为是类型状态的一部分。字段也可以是实例
阅读全文
摘要:5.1 编程语言的基元类型 某些数据类型如此常用,以至于许多编译器允许代码以简化语法来操纵它们。 这种语法不仅增强了代码可读性,生成的IL代码还与使用System.Int32生成的1L代码完全一致。 基元类型(primitive type) 编译器直接支持的数据类型称为基元类型(primitive
阅读全文
摘要:Power Threading Library 30.1 —个简单的混合锁 调用Enter的第一个线程造成Interlocked.Increment在m_waiters字段上加1,使它的值变成1,这个线程发现以前有零个线程正在等待这个锁,所以线程从它的Enter调用中返回。值得欣赏的是,线程获得锁的
阅读全文