深入理解c#(第三版)(文摘)

第一部分 基础知识

第1章 C#开发的进化史

1.3

1.3.1 表示未知的价格

public decimal? Price { get; private set; }

new ProductWithNullablePrice { Name="Sweeney Todd", Price=null}

foreach (ProductWithNullablePrice product in products.Where(p => p.Price == null))

1.3.2 可选参数和默认值

public Product(string name, decimal? price = null)

1.4 LINQ简介

List<ProductWithSupplierID> products = ProductWithSupplierID.GetSampleProducts();
List<Supplier> suppliers = Supplier.GetSampleSuppliers();
var filtered = from p in products
join s in suppliers on p.SupplierID equals s.SupplierID
where p.Price > 10
orderby s.Name, p.Name
select new
{
SupplierName = s.Name,
ProductName = p.Name
};
foreach (var v in filtered)
{
Console.WriteLine("Supplier={0}; Product={1}",
v.SupplierName, v.ProductName);
}

linq to XML

XDocument doc = XDocument.Load("data.xml");
var filtered = from p in doc.Descendants("Product")
join s in doc.Descendants("Supplier")
on (int)p.Attribute("SupplierID")
equals (int)s.Attribute("SupplierID")
where (decimal)p.Attribute("Price") > 10
orderby (string)s.Attribute("Name"),
(string)p.Attribute("Name")
select new
{
SupplierName = (string)s.Attribute("Name"),
ProductName = (string)p.Attribute("Name")
};
foreach (var v in filtered)
{
Console.WriteLine("Supplier={0}; Product={1}",
v.SupplierName, v.ProductName);
}

linq to SQL

1.5 COM和动态类型

1.6 异步代码

第2章 C#1所搭建的核心基础

2.1 委托

1.声明委托类型

2.为委托实例的操作找到一个恰当的方法

3.创建委托实例

4.调用委托实例

------------------------------------------

2.2 类型系统的特征

静态,显示,安全的

2.3 值类型和引用类型 

引用类型保存在堆上,变量的值是在它声明的位置存储的。只有局部变量和方法参数在栈上。

    int? nVal1 = null;
int? nVal2 = 5;
// nVal1为空,相乘后还是null,输出0作为默认值
Console.WriteLine(2 * nVal1 ?? 0);
// nVal2非空,取计算值输出,输出10
Console.WriteLine(2 * nVal2 ?? 0);

第二部分 c#2:解决c#1的问题

第3章 用泛型实现参数化类型

类型约束:

1.引用类型约束:where T:class

2.值类型约束:where T:struct

3.构造函数类型约束:where T:new()  string没有无参的构造函数

4.转换类型约束 派生一个类,多个接口

5.组合约束

由子类向父类转换是协变;由父类向子类转换是逆变

第4章 可空类型

public struct Nullable<T> where T : struct

DateTime? death;

第5章 进入快速通道的委托

第6章 实现迭代器的捷径

yield的用法:

简单地说,当希望获取一个IEnumerable<T>类型的集合,而不想把数据一次性加载到内存,就可以考虑使用yield return实现"按需供给"。

yield break 表示跳出迭代.

yield return 表示在迭代中下一个迭代时返回的数据

第7章 结束c#2的讲解:最后的一些特性

分部类型。静态类。独立的取值方法,赋值方法属性访问器。命名空间别名。

Pragma指令:警告pragma。非安全代码固定大小的缓冲区。把内部成员暴露给选定额程序集。

第三部分 c#3:革新写代码的方式

第8章 用智能的编译器来防错

自动实现的属性。

隐式类型的局部变量。var

对象和集合初始化程序。

Person tom = new Person
{
Name = "Tom",
Age = 9,
Home = { Town = "Reading", Country = "UK" },
Friends =
{
new Person { Name = "Alberto" },
new Person("Max"),
new Person { Name = "Zak", Age = 7 },
new Person("Ben"),
new Person("Alice")
{
Age = 9,
Home = { Town = "Twyford", Country="UK" }
}
}
};

隐式类型的数组。

var tom = new { Name = "Tom", Age = 9 };
var holly = new { Name = "Holly", Age = 37 };
var jon = new { Name = "Jon", Age = 36 };

匿名类型。

第9章Lambda表达式和表达式树

第10章 扩展方法

第11章 查询表达式和Linq to objects

第12章 超越集合的Linq

第四部分 c#4:良好的交互性

第13章 简化代码的微小修改

第14章 静态语言中的动态绑定

dynamic

第五部分 c#5:简化的异步编程

第15章 使用async/await进行异步编程

第16章 c#5附加特性和结束语

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值