《C# 6.0 本质论》 阅读笔记
《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 本质论》 阅读笔记的更多相关文章
- 阅读《RobHess的SIFT源码分析:综述》笔记
今天总算是机缘巧合的找到了照样一篇纲要性质的文章. 如是能早一些找到就好了.不过“在你认为为时已晚的时候,其实还为时未晚”倒是也能聊以自慰,不过不能经常这样迷惑自己,毕竟我需要开始跑了! 就照着这个大 ...
- RobHess的SIFT源码分析:imgfeatures.h和imgfeatures.c文件
SIFT源码分析系列文章的索引在这里:RobHess的SIFT源码分析:综述 imgfeatures.h中有SIFT特征点结构struct feature的定义,除此之外还有一些特征点的导入导出以及特 ...
- RobHess的SIFT源码分析:综述
最初的目的是想做全景图像拼接,一开始找了OpenCV中自带的全景拼接的样例,用的是Stitcher类,可以很方便的实现全景拼接,而且效果很好,但是不利于做深入研究. 使用OpenCV中自带的Stitc ...
- 阅读《RobHess的SIFT源码分析:综述》笔记2
今天开始磕代码部分. part1: 1. sift特征提取. img1_Feat = cvCloneImage(img1);//复制图1,深拷贝,用来画特征点 img2_Feat = cvCloneI ...
- element-ui button组件 radio组件源码分析整理笔记(一)
Button组件 button.vue <template> <button class="el-button" @click="handleClick ...
- element-ui 组件源码分析整理笔记目录
element-ui button组件 radio组件源码分析整理笔记(一) element-ui switch组件源码分析整理笔记(二) element-ui inputNumber.Card .B ...
- element-ui Carousel 走马灯源码分析整理笔记(十一)
Carousel 走马灯源码分析整理笔记,这篇写的不详细,后面有空补充 main.vue <template> <!--走马灯的最外层包裹div--> <div clas ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- element-ui MessageBox组件源码分析整理笔记(十二)
MessageBox组件源码,有添加部分注释 main.vue <template> <transition name="msgbox-fade"> < ...
- element-ui switch组件源码分析整理笔记(二)
源码如下: <template> <div class="el-switch" :class="{ 'is-disabled': switchDisab ...
随机推荐
- poj3279 Fliptile
思路: 枚举. 枚举了第一行的操作之后,下面每行的操作也随之确定了.因为在确定了第i行的操作之后,要想再改变a[i][j]的状态只能通过改变a[i + 1][j]来实现.另外,用到了集合的整数表示方法 ...
- git Eclipse项目不显示当前分支
问题: 在Eclipse中,导入新的git项目,在项目上不再显示当前所处的分支,也不再显示修改了哪些文件 解决: 右键选中项目 --> Team --> Share Project ...
- QS之shell script
1 Invoke Mdoelsim In order to open Modelsim automatically, it is better to use a shell script to inv ...
- Spring+Spring MVC+Hibernate增查(使用注解)
使用Spring+Spring MVC+Hibernate做增删改查开发效率真的很高.使用Hibernate简化了JDBC连接数据库的的重复性代码.下面根据自己做的一个简单的增加和查询,把一些难点分析 ...
- canvas一周一练 -- canvas绘制中国银行标志(4)
运行效果: <!DOCTYPE html> <html> <head> </head> <body> <canvas id=" ...
- CAD使用GetAllAppName读所有名称(网页版)
主要用到函数说明: MxDrawEntity::GetAllAppName 得到所有扩展数据名称,详细说明如下: 参数 说明 [out, retval] IMxDrawResbuf** ppRet 返 ...
- vue基础---表单输入绑定
[一]基础用法 用 v-model 指令在表单 <input>.<textarea> 及 <select> 元素上创建双向数据绑定.它会根据控件类型自动选取正确的方 ...
- oracle查询没有主键的表
select table_name from user_tables a where not exists (select * from user_constraints b where b.cons ...
- Getting start with dbus in systemd (03) - sd-bus.h 使用例子 (systemd version>=221)
sd-bus.h 例子 注意: sd-dbus 是systemd提供的lib,但是这个lib,只有在systemd>v221版本后才可以使用,centos 219版本太低,所以不能使用. 参考: ...
- 部署web服务器的配置——补充mysql和tomcat
今天想到了关于mysql的一些配置,以后关于配置mysql和tomcat相关的内容也会补充在这里. tomcat: 1. 更改内存(要设置tomcat内存,解决内存溢出的问题):安装版tomcat,打 ...