《精通c#》基础应用1
1,格式化数值数据

使用:
a,Console.WriteLine($"{xxxx:n}"); //控制台输出
b,string.Format(); //方法输出
2,内建数据类型与new操作符
所有的内建数据类型都支持默认构造函数,这个特性允许我们使用new关键字来创建变量,它将变量自动设置为其默认值;
bool默认false;
数值类型默认为0;浮点型为0.0;
char类型为单个空字符;
BigInterger变量设置为0;
DateTime类型设置为1/1/0001 12:00:00 AM;
对象引用包括string设置为null;
3,数据类型类的层次结构

所有类型都派生自System.Object, 它定义了一组.NET基础类库中所有的类型都具有的方法, 如Tostring(), Equals(), Get Hash Code()等;
很多数值数据类型派生自System.ValueType类, 派生自ValueType的类行都会自动;
4,字符串解析数值
通过给定义文本生成相应的底层类型变量;既任意类型的 .Parse("xxx");
实例:
在System.Numberics.dll程序集中,创建的BigInteger变量接受一个大的字符串数值数据,此时,我们就需要使用静态的Parse()方法转换成BigInteger变量;
5,判断相等的方法
1,Object.ReferenceEquals(left, right);
判断两者是否是相同的引用,值类型对象判断永远false,两个null比较永远是true;
2,Object.Equals(left, right);
值类型比较内容;引用类型比较引用地址;
3,双等号 ==
值类型比较内容;引用类型比较引用地址;而字符串的比较可以看作是值类型(c#的string在栈中);
6,基元类型溢出checked和unchecked
checked:
对基元类型执行的许多算术运算都可能造成溢出,必须使用checked来控制溢出的检查;示例:
byte b = 100; b = checked((Byte)(b + 300)); //溢出错误,由于byte最大长度为255;
==> checked { byte b = 100; b += 200; //checked语句块中,可以直接使用+=操作符,编译器会将把转换成byte,前提是200必须在byte范围内 }
结合try catch就会提示运行时异常:System.OverflowException;unckecked:
如果某段代码中的数据丢失是可以接受的,那么使用unckecked去禁止抛出溢出异常;
7,隐式类型变量的限制,var的限制
var myData; //错误,必须分配值;
var myInt; myInt = 0; //错误,必须声明时分配值;
var myObj = null; //错误,不能分配null作为初始值;
private var myInt = 10; //错误,不能用于字段数据;
public var MyMethod(var x, var y){} //错误,不能用于返回值或参数类型;
不同于Javascript中的动态类型(变量的生命周期中可以保存不同类型), c#隐式类型的本地变量是强类型数据,但是可以使用dynamic关键字实现动态类型;用处:LINQ查询时,返回的时一种底层LINQ数据类型,使用var 接收查询的结果时几乎不用关注返回值的基础类型;