提要,此文章并不会记录过于基础的东西,只会记录个人认为比较重要的概念以及实用的代码,如果您是新手强烈建议阅读实体书,自己一步一步敲一遍
第二十二章 命名空间和程序集
using 别名
usign Sys = System;using static
引用指定命名空间中特定的类,从而使用其静态成员程序集的构成
在第一章.Net中就讲过了主要的是CIL通过JIT动态编译使用的东西、程序集中类型的元数据、引用其他程序集列表等等。
第二十三章 异常
第二十四章 预处理指令
概念
指示编译器如何处理源代码#define
必须在C#代码前#line
行号指令
第二十五章 反射和特性
什么叫做反射?
第一章和第二十二章讲了程序集,知道程序集中包含所有类型的元数据(meta数据)。元数据是对程序以及类型的描述
。而反射就是程序在运行时查看元数据
。特性是什么?
是一种允许我们向程序集添加元数据的语言结构。目的:
告诉编译器将某组元数据嵌入程序集Conditional
将会忽略方法中的所有调用,下面是使用,注释了将不会显示XXX
调用者信息特性
CallerFilePath、CallerLineNumber、CallerMemberName。用于方法的参数。调试特性
在进行调试时,使用DebugStepThrough将不会进入某些地方。适用于类、结构体、构造方法、访问器、方法。全局特性
[assembly:特效类名] 放在命名空间外。常放在AssemblyInfo.cs中,用于公司、产品版权信息等自定义特性
自定义特性只需要继承System.Attribute。自定义特性类也是类,依然可以使用相关特性修饰。AttributeUsage
使用特性类
是否使用了某特性
type.IsDefined(AttType, 是否搜索类的继承树)获得使用的特性
type.GetCustomAttributes返回object[], 需要转换
第二十六章 C#6.0和C#7.0新增内容
字符串插值
$"数值为:{value}"
自动属性初始化
public int Count{get;set;} = 20
属性表达式
public int Count=>personCount + 2
空条件运算符
someObj?.Method()
someObj不为空则执行Method函数异常过滤器
catch(Exception ex) when (ex.Message.Contains("404"))
值元组
ValueTuple结构体