目前进度
page 32
第一章 C#开发的进化史
- 类型
写法的简化,从C#1的写法,到delegate写法,到匿名函数写法,越来越精简
①一句写完get、set和访问修饰符 C#3
②存储方式public class Product { public string Name { get; set; } public decimal Price { get; private set; } public Product(string name, decimal price) { Name = name; Price = price; } }
从不安全的Array到了List
- 排序和过滤
①排序//匿名方法 products.Sort(delegate (Product x, Product y) { return x.Name.CompareTo(y.Name); } ); //lambda表达式 products.Sort((x, y) => x.Name.CompareTo(y.Name));
②查询
//Predicate Predicate<Product> test = delegate (Product p) { return p.Price > 10m; }; List<Product> matches = products.FindAll(test); Action<Product> print = Console.WriteLine; matches.ForEach(print); //匿名方法 products.FindAll(delegate (Product p) { return p.Price > 10m; }).ForEach(Console.WriteLine); //lambda表达式 products.FindAll((p) => p.Price > 10m).ForEach(Console.WriteLine);
-
处理未知数据
.NET 2.0引入Nullable<T>结构 让值类型也变为可空
"?"可以为null的学习,我之前已经会了。
- LINQ(language integrated Query) C#3核心
①LINQ太简洁了 链接(join) 筛选(on) 排序(orderby) 投影(select)一句话做完。
太酷了!还在看序的时候看到语法糖是为了LINQ,本来觉得语法糖已经很帅了,搜了一下LINQ的作用也很酷!以后要学习学习。
②LINQ管理XML 和 SQLvar 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 };
顺手看了一下XML的基本操作
但工作上没有这需求,在回顾的时候已经忘记了
③
var类型则是推断类型,也就是说在编译时可以确定的类型,
dynamic则是动态类型,
类型不同区别在于一个是编译时确定的, 一个是运行时确定。
④
其实他与另一种类型有相当好的配合——就是匿名类。匿名类一般适用于lamba表达式,所以作用范围也只是当前的方法或片段中,
但如果这个匿名对象如果想在其他成员方法中引用,或才为字段/属性时,这个dynamic类型的作用就显示出来的。
- COM和动态类型
①COM
C#4特有特性
也用不上...
②动态类型
- 异步代码 C#5
- .NET平台
①JIT
具体的做法是这样的:当载入一个类型时,CLR为该类型创建一个内部数据结构和相应的函数,
当函数第一被调用时,JIT将该函数编译成机器语言.当再次遇到该函数时则直接从cache中执行已编译好的机器语言.
②发现了此书提起Mono
Mono对C#编译器输出了解释,转化为了本地代码,进行JIT编译(查资料发现也使用了AOT)。
网上解释↓
.NET是微软的一个开发平台,简言之相当于Java的jdk,即最基础的开发包,最基础的框架。
Java开发首先安装jdk,而C#开发首先安装.NET。
Java开发借助开发工具eclipse或者idea,C#开发借助开发工具visual studio或者visual studio code。
Java是sun公司的编程语言,C#是微软的编程语言。
Java可以跨平台,微软也希望C#能够跨平台但是却不能够跨平台,微软主要业务来自Windows,如果跨平台,会打击Windows市场。
mono就是为了解决C#跨平台的问题,由Xamarin公司提出的,微软睁一只眼闭一只眼,不支持也不理会,任其自生自灭。
③运行时
.NET运行时部分相当少的代码,负责确保用IL写的符合CLI规范的方式执行,称为CLR。
- 炫酷代码
第二章 C#1所搭建的核心基础
- 委托
- 类型系统的特征
①C#在类型系统的世界中的位置
很多书说C#是强类型 其实是指它是一种静态类型的语言(C#依然可以进行类型转换)
(隐式转换)
float f1 = 5;
double d1 = f1;
(显式转换)
double d1 = 5;
float f1 = (float)d1;
②显式类型和隐式类型
- 值类型和引用类型
①举例说明
想当值得一看 加深理解 但又不可以简单言表
②误区
③装箱与拆箱