《C# 6.0 本质论》 阅读笔记

 

阅读笔记不是讲述这本书的内容,只是提取了其中一部分我认为比较重要或者还没有掌握的知识,所以如果有错误或者模糊之处,请指正,谢谢!

对于C# 6.0才有的新语法基本都有标记,开发的时候要注意使用,以免造成不兼容现象。

一。第一章 
1.控制台中可以使用,其会在每一次输入的时候获取键盘输入的值。可以用Console.ReadKey().KeyChar获取输入的字符。

  void UseReadKey()
    {
        var a = Console.ReadKey().KeyChar;
        Console.WriteLine(a);

    }

2.C#6.0新语法:$"this is {变量名}" 可以在大括号中直接输入变量名调用,类似于string.Format(),更加简洁。

void UseNewFormat()
    {
        string FirstName = "First";
        string LastName = "Last";

        Console.WriteLine($"The Name is :{FirstName} {LastName}");
    }

3.静态引用 using Static System.Console; 可以将Console.WriteLine();缩写成WriteLine(); 仅能对静态函数缩写。

 using static System.Console;
    void UseStaticUsing()
    {
        string Str = Read();
        WriteLine(Str);
    }

二。第二章
1.小数位过多时候,直接转换为字符串会丢失精度,使用 string.Format("{0:R}",a);就不会丢失精度。

void UsingFormatR()
{
   double Str=3.15489764531879874;

   Console.WriteLine(Str);//会丢失一部分 显示3.154897645318
   Console.WriteLine("{0:R}",Str);//不会丢失 显示3.1548976453187989  为什么会比赋值数值少,因为
}

2.可空修饰符 值类型+? 默认值为null

void UseNullable()
        {
            double? Db = null;
            int? It = null;
        }

3.尝试转换 值类型特有 只在可以转换的时候进行转换。

 string a = "456789";
 string b = "abce456";

 int inta=0;
 int intb=0;
 var boola = int.TryParse(a,out inta);//返回true,inta=456789
 var boolb= int.TryParse(b,out intb);//返回false,intb=0

4.溢出检测 checked{} 当块内的数据溢出的时候会抛出错误。

 checked
  {
    long b = 894156132165798;
    int a = Convert.ToInt16(b);
  }

5.返回值 default(T) 可以返回任何类型的默认值。

return default(int?);

return default(int);

6.二维数组 int[,] a=new int[3,4]; Console.WriteLine(a[1,1]);
   交错数组 int[][] a={new int[] {1,2},new int[] {3,4}};Console.WriteLine(a[1][1]);

7.数组扩充 Array.Resize(ref a,100); 将原有数组a中的内容复制到新数组中,并且新数组的长度为100,然后将原有数组a指向新数组。

            int[] a = new int[10];//数组a的长度为10
            Array.Resize(ref a, 100);//数组a的长度为100

三。第三章
1.数值型数据两个特殊值:Nan Not a Number(非数值) ,Infinty(无穷)

2.在多线程中使用i++,i--等自增自减,由于该操作不是原子性操作,可能造成竞争资源。为了防止该现象出现,可以使用System.Threading.Interlocked.Increment(ref i);自增
   或者System.Threading.Interlocked.Decrement(ref i);自减

            int i = 10;

            System.Threading.Interlocked.Increment(ref i);//i=11
            System.Threading.Interlocked.Decrement(ref i);//i=10

3. ??操作符 二元操作符号,当左边的值为null时候取右边的值。 左边的值必须是可以为null的,包括引用类型和可空类型。

            int? a = null;
            int b=  a ?? 18;

4.C#6.0新语法 ?. 判断实例是否为null,如果返回值为值类型会返回值的可空类型。例如new Person() ?.age的值是0

5.位运算【!!!!未学明白!!!!】 ^(异或) ,&(同或),|(与非),~(按位取反), 掩码,位映射

6.预处理

四。第四章
1.命名空间使用别名

using CountDownTimer=System.Timers.Timer;

2.可变参数 :

private static void xianshi(params string[] str)
        {
            foreach (var item in str)
            {
                Console.WriteLine(item);
            }
        }

参数带params表示该函数是可变参数,可变参数必须是一位数组,可以接受该类型的值和一维数组的值。且可变参数必须是参数列表最后一个参数(仅可以一个)。
3.可选参数:在参数中可以给参数赋初始值,当没有输入该参数的时候,将会使用默认值。

 private static void GetList(string whereStr = "", string OrderStr = "", string Go = "")
        {
            Console.WriteLine(whereStr + OrderStr + Go);
        }

3.指定参数名调用

五。第五章 类
1。资源回收:GC会自动回收托管资源。 隐式确定性资源清理 使用终结器 ;显式确定性资源 使用using(){};
2。自动属性也可以赋默认值。 public string Name{get;set;}="NoName";
3.C#6.0 :nameof(<变量>) 取变量名变成字符串,可以防止当变量名改变后,忘记修改对应的字符串。 语法糖。
4.C#6.0 :支持只读属性的自动实现(赋默认值)
5.对象初始化器 :在已有Person类的情况下: Person Ps=new Person(){Name="Liu",Age="11"};
6.构造器链:构造函数1:public Employee(string firstName ,string lastName) {this.FirstName=firstName;this.LastName=lastName}
构造函数2:public Employee(int id,string firstName ,string lastName):this(firstName,lastName){this.ID=id};
构造函数2使用了构造函数1的方法,形成构造链。
7.静态构造函数:在类被首次访问的时候执行。
8.静态属性:静态字段可以使用属性实现。
9.静态类:编译器会自动标记为abstract和saled ,所以不可以继承。 静态类中实例方法是没有意义的。
10.分部类:partial class Person{} ;分部类只允许在同一程序集中实现。分部类需要声明方法才可以调用,并且分部方法之前要加partial,分部方法只能返回void,且不允许使用out,可以使用ref。

checkbox

 

创建:<input type="checkbox" id="ck">

选中取消:
原生js: document.getElementById("ck").checked = true[false];
Jquary: $("#ck").attr("checked", true[false]);

获取是否选中:
原生js:var d = document.getElementById("ck").checked;
Jquary:var d = $("#ck").is(":checked");

《C# 6.0 本质论》 阅读笔记的更多相关文章

  1. 阅读《RobHess的SIFT源码分析:综述》笔记

    今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...

  2. RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件

    SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...

  3. RobHess的SIFT源码分析:综述

    最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...

  4. 阅读《RobHess的SIFT源码分析:综述》笔记2

    今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...

  5. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  6. element-ui 组件源码分析整理笔记目录

    element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...

  7. element-ui Carousel 走马灯源码分析整理笔记(十一)

    Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...

  8. STL源码分析读书笔记--第二章--空间配置器(allocator)

    声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...

  9. element-ui MessageBox组件源码分析整理笔记(十二)

    MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...

  10. element-ui switch组件源码分析整理笔记(二)

    源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...

随机推荐

  1. HTTP常见面试题

    转自:http://www.cnblogs.com/Java3y/p/8444033.html Http与Https的区别: Http与Https的区别: HTTP 的URL 以http:// 开头, ...

  2. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  3. JMeter在linux上分布式压测遇到的坑(三)

    master和slave机要在同一网段内,才能做分布式(Jmeter要配环境变量,这样不用手动起server) 分布式不成功,解决方案: 1.master端和slave端要ping通 2.ping通后 ...

  4. day15-模块的基础及导入

    目录 模块 什么是模块 使用模块 import 循环导入问题 解决方案一 解决方案二 模块的搜索路径 Python文件的两种用途 包 导入包内包 导入包内包的模块 绝对导入与相对导入 绝对导入 相对导 ...

  5. 浅谈IFC

    IFC布局规则: 在一个行内格式化上下文中,盒是一个接一个水平放置的,从包含块的顶部开始 这些盒之间的水平margin,border和padding都有效 盒可能以不同的方式竖直对齐:以它们的底部或者 ...

  6. vue基础---实例

    (1)数据和方法 ①响应式双向绑定 当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性.当这些属性的值发生改变时,视图将会产生“响应”,即匹配更新为 ...

  7. ThinkPHP---拓展之jQuery的ajax

    [前言] 用Sublime开发时,推荐下载一个jQuery插件,可以智能化创建基本函数格式,支持自动生成,可以提高开发效率 (1)jQuery里ajax方法有几个? 答:有4个,分别为post.get ...

  8. 01Microsoft SQL Server

    Microsoft SQL Server Microsoft SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可跨越膝上型 ...

  9. 关于fragment+viewpager的优化

    上次写了一个问答项目,用的fragment+viewpager架构,后来发现,划了几次之后,再划回来,会重新加载布局,重新获取数据,这样整个程序和卡,并且占用太多的网络资源. 当时的解决办法是,自己重 ...

  10. MFC 程序 手写创建顺序

    MFC 程序 手写创建顺序 1.继承CWinApp类 覆盖 class CMyApp : public CWinApp { virtual BOOL InitInstance(); } BOOL CM ...