菜鸟文档 C#教程(一)
2022-05-27 本文已影响0人
Die时而动
菜鸟文档 C#教程
[toc]
只记录与C++不同处
初级语法
- C#运算符
- is 判断类型
- as 无异常强制转换
- C#循环
- foreach(type i in type[] list)
- C#封装
- internal
- protected internal
- C#方法
- 输出传参
- out
- 引用传参
- ref
- 输出传参
- C#可空类型
- ?单问号定义可空类型
- int? i;默认为null
- ??双问号Null合并运算符
- 按顺序从前到后返回第一个不为null的值
- ?单问号定义可空类型
- C#数组
- 多维数组
- int[,] 二维
- 交错数组
- 类似C多维数组
- 参数数组
- function(params int[])
- Array类
- 多维数组
高级语法
- 特性Attribute
- 元数据
- 编译器指令
- 注释
- 描述
- 方法
- 类
- ...
- 声明性标签
- 使用特性
- 在应用元素前一行 [特性(参数)]
- 预定义特性
- AttributeUsage辅助声明一个自定义特性
- Conditional标记一个条件方法Debug或Trace
- Obsolete标记过时元素
- 自定义特性
- 声明自定义特性类
- 使用AttributeUsage进行标记特性
- 继承System.Attribute
- 构建自定义特性
- 确定私有属性和共有属性
- 必须的定位positional参数和可选的named参数
- positional属性通过构造函数初始化
- 应用自定义特性
- 前一行使用特性标记即可
- 通过反射访问特性
- 声明自定义特性类
- 元数据
- 反射Reflection
- 作用
- 运行时查看元数据
- 审查集合中各种类型,实例化
- 延迟绑定方法属性
- 运行时创建新类型,使用类型
- 作用
- 属性Property
- 基本概念
- 命名named成员
- 域Field:类或结构中的成员变量或方法
- 属性:域Field的拓展
- 访问私有域的值
- 访问器accessor
- 声明定义
// 声明类型为 string 的 Code 属性 public string Code { get { return code; } set { code = value; } }
- 使用:当作公有域来使用
- 抽象属性
- 声明加abstract,实现加override
- 基本概念
- 索引器Indexer
- 使用数组访问运算符[]访问类的成员
- 声明类似属性的声明,也有点像[]运算符重载
- element-type this[int index]{get{} set{}}
- 索引器也可被重载,不一定非得整型
- int this[string name]
- 委托delegate
- 概念:类似函数指针,可用委托间接调用同参,同返回的别的方法
- 声明:delegate 返回值与参数与回调调用方法一致
- 实例化:将回调方法名当作参数传入new中
- 使用:正常函数调用形式
- 多播:+,-运算符组合多个相同接口结构的回调函数,使用时会顺序执行
- 事件event
- 概念
- 事件:通过委托特性调用一系列回调函数
- 发布器订阅器模型:发布器声明委托和事件,订阅器提供事件发生时,该调用的回调函数
- 发布器定义:
- 先声明委托
- event delegatename eventname;
- 编写使用委托机制的“逻辑事件”方法,达到“事件”发生通过委托调用回调方法的逻辑。
- 订阅器定义:
- 提供回调方法
- 使用:
- 实例化发布器与订阅器
- 定义发布器中的委托,与订阅器中的回调方法相关联
- 可直接将实例化的委托通过+-号对发布器中事件本身进行定义
- 通过发布器调用“逻辑事件”方法,内部调用到委托时,就会调用关联好的订阅器中的回调方法
EventTest e = new EventTest(); /* 实例化对象,第一次没有触发事件 */ subscribEvent v = new subscribEvent(); /* 实例化对象 */ e.ChangeNum += new EventTest.NumManipulationHandler( v.printf ); /* 注意!这里是事件进行委托的加减操作 */ e.SetValue( 7 ); e.SetValue( 11 );
- 概念
- 集合Collection
- ArrayList动态数组
- Hashtable哈希表
- SortedList排序列表
- Stack堆栈
- Queue队列
- BitArray点阵列
- 泛型Generic
- 延迟编写类或方法中的数据类型,运行时指定
- 声明:在类或方法名后加尖括号参数为泛型类型名<T>
- 使用:加尖括号指定具体类型
- 泛型特性
- 重用性
- 创建泛型集合类
- 各种泛型组合
- 对泛型进行约束:使用where语句
- 关于泛型数据类型的信息,可在运行中使用反射获取
- typeof(T)返回System.Reflection.MemberInfo
- 应用类型
- 泛型类
- 泛型方法
- 泛型委托
- 泛型事件
- 匿名方法
- 只有名称没有主体的方法
- 使用委托对象调用委托所引用的方法
delegate void NumberChanger(int n); // 使用匿名方法创建委托实例 NumberChanger nc = delegate(int x) { Console.WriteLine("Anonymous Method: {0}", x); }; // 使用匿名方法调用委托 nc(10);
- 不安全代码
- 多线程
- 线程:程序执行路径
- 线程生命周期
- 创建状态
- 就绪状态
- 不可运行状态
- 死亡状态