【读书笔记】 -- 深入理解C#

目前进度

page 32

 

第一章   C#开发的进化史

  1. 类型

    写法的简化,从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
     
  2. 排序和过滤
    ①排序
    //匿名方法
    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);

     

  3. 处理未知数据
    .NET 2.0引入Nullable<T>结构 让值类型也变为可空
    "?"可以为null的学习,我之前已经会了。
     

  4. LINQ(language integrated Query)  C#3核心

    ①LINQ太简洁了 链接(join) 筛选(on) 排序(orderby) 投影(select)一句话做完。
    太酷了!还在看序的时候看到语法糖是为了LINQ,本来觉得语法糖已经很帅了,搜了一下LINQ的作用也很酷!以后要学习学习。
    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 };
    ②LINQ管理XML 和 SQL 
    顺手看了一下XML的基本操作
    但工作上没有这需求,在回顾的时候已经忘记了


    var类型则是推断类型,也就是说在编译时可以确定的类型,
    dynamic则是动态类型,
    类型不同区别在于一个是编译时确定的, 一个是运行时确定。


    其实他与另一种类型有相当好的配合——就是匿名类。匿名类一般适用于lamba表达式,所以作用范围也只是当前的方法或片段中,
    但如果这个匿名对象如果想在其他成员方法中引用,或才为字段/属性时,这个dynamic类型的作用就显示出来的。
     
  5. COM和动态类型

    ①COM 
    C#4特有特性
    也用不上...

    ②动态类型
     
  6. 异步代码   C#5

     
  7. .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。

     
  8. 炫酷代码
     

 

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

  1.    委托
     
  2.  类型系统的特征

    ①C#在类型系统的世界中的位置
    很多书说C#是强类型 其实是指它是一种静态类型的语言(C#依然可以进行类型转换)
    (隐式转换)
    float f1 = 5;
    double d1 = f1;
    (显式转换)
    double d1 = 5;
    float f1 = (float)d1;

    ②显式类型和隐式类型


     
  3. 值类型和引用类型

    ①举例说明 
    想当值得一看 加深理解 但又不可以简单言表 

    ②误区


    ③装箱与拆箱
     



 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值