[学习笔记]前接:https://www.cnblogs.com/aland-1415/p/7360509.html

一、异常处理

1、格式

try{
}
catch{
}
catch{
}
...
finally{
} 抛出异常:
Catch(Exception e){
...
Throw e;
}

2、C#中的异常类主要直接或间接地派生于System.Exception类的。

System.ApplicationException           支持由应用程序生成的异常;
System.SystemException     所有预定义的系统异常基类,包含以下所有的类:
System.IO.IOException      I/O异常;
System.IndexOutOfRangeException 方法指向超出范围的数组索引时生成的错误;
System.ArrayTypeMismatchException 数组类型不匹配异常;
System.NullReferenceException 处理依从一个空对象时生成的错误;
System.DivideByZeroException 处理当除以0时生成的错误;
System.InvalidCastException    处理类型转换期间生成的错误;
System.OutOfMemoryException    处理空闲内存不足错误;
System.StackOverflowException 处理栈溢出生成的错误;

二、文件的读写

1、一般文件读写

FileStream<object_name>=newFileStream(<fileName>,<FileMode Enumerator>,<FileAccess Enumerator>,<FileShare Enumerator>);

FileMode   参数有Append,Create,CreateNew(如果文件存在则抛异常),Open(如果文件不存在则抛异常),OpenOrCreate,Truncate(文件不存在抛异常,打开文件会重新写入,但会保留文件的初始创建日期);

FileAccess      参数有Read,ReadWrite,Write;

FileShare   参数有Inheritable,None,Read,ReadWrite,Write,Delete;

2、System.IO 命名空间中常用非抽象类:

BinaryReader    二进制流读取数据;
BinaryWriter 二进抽格式写入数据;
BufferedStream 字节流的临时存储;
Directory 有助于操作目录结构;
DirectoryInfo 对目录执行操作;
DriveInfo 驱动器信息;
File 有助于处理文件;
FileInfo 对文件执行操作;
FileStream 用于对文件中任何位置的读写;
MemoryStream 用于随机访问存储在内存中的数据流;
Path 对路径信息执行操作;
StreamReader 从字节流中读取字符;
StreamWriter 向一个流中写入字符;
StringReader 读取字符串缓冲区;
StringWriter 写入字符串缓冲区;

3、例:

    FileString fs = new FileStream("fileName",FileMode.Append,FileAccess.Write);
  StreamWriter sw = new StreamWriter(fs);
sw.WriteLine("Hello!");
sw.Close();
fs.Close();

三、正则表达式

1、匹配规则

[character_group]    取其中一个字符,也可用-号来确定一个范围;
\w 任何单词字符;
\W 任何非单词字符;
\s 任何空白字符;
\S 任何非空白字符;
\d 十进制数字;
\D 非十进制数字
\p{name} 与name指定的Unicode通用类别或命名块中的任何单个字符匹配
\P{name} 与不在name指定的Unicode通用类别或命名 ^ 从字符串或一行的开头处开始匹配,如果是在[ ] 内则表示“非”
$ 从字符串或行的结尾处开始匹配;
\A 匹配必须出现在字符串的开头;
\Z 匹配必须出现在字符串的末尾,用法同$;
\G 匹配必须出现在上一个匹配结束的地方;
\b 匹配一个单词边界;
\B 匹配非单词边界; * 贪婪匹配{,∞}
+ 贪婪匹配{,∞}
? 贪婪匹配{,}
{n} 匹配一个元素n次;
{n,} 贪婪匹配一个元素n次以上;
{n,m}贪婪匹配一个元素至少n次,最多m次
(以上限定符后跟一个?就表示非贪婪匹配,即尽可能少的匹配) (subexpression) 捕获匹配子表达式,并将其分配到一个从零开始的序号中;
(?<name>subexpression) 将匹配的子表达式捕获到一个命名组中; \number 反向引用。匹配编号子表达式的值;
\k<name> 命名反向引用。匹配命名表达式的值; $number 按组number替换匹配的字符串;
${name} 按命名组name匹配子字符串;
$$ 替换$字符;
$& 替换整个匹配项的一个副本;
$` 替换匹配前的输入字符串所有文本;
$' 替换匹配后的输入字符串的所有文本;
$+ 替换最后捕获的组;
$_ 替换整个输入字符串; (?imnsx-imnsx) 在模式中间对诸如不区分大小写这样的选项进行设置或禁用;
(?#注释) 内联注释;

2、Regex类(用于表示一个正则表达式);

public bool IsMatch(string input)                 指示Regex构造函数中指定的正则表达式是否在指定输入字符串中找到匹配;
public bool IsMatch(string input,int startat)      指示Regex构造函数中指定的正则表达式是否在指定输入字符串中找到匹配,从字符串中指定的开始位置开始;
public static bool IsMatch(string input,string pattern) 指示指定的正则表达式是否在指定的输入字符串中找到匹配项;
public MatchCollection Matches(string input)        在指定的输入字符串中搜索正则表达式的所有匹配项;
public string Replace(string input,string replacement) 在指定输入字符串中把所有匹配正则表达式模式的所有匹配字符串替换为指定的替换字符串;
public string[] Split(string input)          把输入字符串分割为子字符串组;

四、多线程(System.Threading.Thread)

1、System.Threading.Thread      类属性:

CurrentContext        获取线程正在其中执行的上下文;
CurrentCulture 获取或设置当前线程的区域性;
CurrentPrinciple 获取或设置线程的当前负责人;
CurrentThread 获取当前正在运行的线程;
CurrentUICulture 获取或设置资源管理器使用的当前区域性以便在运行时查找区域性特定资源;
ExecutionContext 获取一个ExecutionContext对象;
IsAlive 获取当前线程的执行状态;
IsBackground 判断线程是否为后台运行;
IsThreadPoolThread 获取一个值,该值指示线程是否属于托管线程池
ManagedThreadld 获取当前托管线程的唯一标识符;
Name 获取或设置线程名称;
Priority 获取线程调试优先级值;
ThreadState 获取线程当前状态;

2、System.Threading.Thread方法:

Start()        开启线程;
Sleep() 暂停线程;
Abort() 销毁线程
Interrupt() 中断处于WaitSpleepJoin线程状态线程;
Join() 在继续执行标准的COM和SendMessage消息处理期间,阻塞调用线程,直到某个线程终止为止;
BeginCritical

五、事件(event)

1、事件使用“发布-订阅(publisher-subscriber)模型

发布器:是一个包含事件和委托定义的对象,事件和委托之间的联系也定义在这个对象中。发布器类的对象调用这个事件,并通知其他对象;

订阅器:是一个接受事件并提供事件处理程序的对象。在发布器类中委托调用订阅器类中的方法

2、声明事件:

public delegate void BoilerLogHandler(string status);
public event BoilerLogHandler BoilerEventLog;

相当于把BoilerEventLog这个事件绑定在delegate上了,它既是一个委托BoilerEventLog(string a)也是一个事件BoilerEventLog;

六、补充内容

1、特性(Attribute)

用于在运行时传递各种元素的行为信息的声明性标签,通过放置在它所应用的元素前面的[]号来描述;

AttributeUsage

Conditional

Obsolete

2、属性(property)

即set,get方法,且两个方法都没参数也没有小括号,使可以访问和修改private属性;

抽象类也可以拥有抽象属性,这些属性在子类中应被实现;

例:

public abstract int A
{
set;
get;
}

3、索引器(indexer)

允许一个对象可以像数组一样被索引,可以使用[]来访问类的实例;

一维索引器语法:

elementType this[int index]
{
get
{
//返回index指定的值
}
set
{
//设置index指定的值
}
}

索引器可以被重载,且可以是不同类型的多维参数;

4、委托(delegate)

声明委托(相当于新建一个类): delegate <return type> <delegate-name> <parameter list>;

一旦声明了委托类型,委托对象必须使用new来创建,创建时的参数是一个具有相同类型参数和返回数据类型的方法名,然后可用这个new的名字来代替这个方法进行使用;

多播:委托对象可使用“+”运算符进行合并,但只有相同类型的委托可合并,“-”可用于从合并的委托中移除组件;多播可以完成一次调用多个方法的目的;

一个类中的多个方法可只新建一个委托对象,其他方法用“+”进行合并;

5、匿名方法

没有名称中有主体,匿名方法不需要指定返回类型,通过delegate关键字创建委托实例来声明

delegate void NumberChange(int n);
NumberChange nc = delegate(int x) //匿名委托实例
{
Console.WriteLine(" ");
}

6、泛型(Generic)

通过使用System.Collections.Generic后可使用泛型

使用时在类名后加一个<name>来代替一种数据类型,在要具体实例一种数据时将name换成相应的数据名即可;

泛型委托: delegate T NumberChange<T>(T x);

C#基础语法补充的更多相关文章

  1. Java基础知识二次学习-- 第二章 基础语法与递归补充

    第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...

  2. JavaScript学习笔记-基础语法、类型、变量

    基础语法.类型.变量   非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1.用x != x ,当x为NaN时才返回true; 2.用isNaN(x) ,当x为NaN或 ...

  3. Swift基础语法学习总结

    Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础  1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...

  4. swift3.0基础语法

    swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...

  5. Python3 与 C# 基础语法对比(就当Python和C#基础的普及吧)

      文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 多图旧排版:https://www.cnblogs.com/dunitian/p/9 ...

  6. 基础运算符补充,流程控制之if判断/while循环

    常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...

  7. JavaSE入门学习7:Java基础语法之语句(下)

    继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...

  8. Hive学习笔记:基础语法

    Hive基础语法 1.创建表 – 用户表 CREATE [EXTERNAL外部表] TABLE [IF NOT EXISTS 是否存在] HUserInfo ( userid int comment ...

  9. JavaScript的基础语法

    对于Javascript的而言没有数据类型的全部都是通过var来定义创建的.比如: <!DOCTYPE html> <html> <head> <meta c ...

随机推荐

  1. tips 前端 bootstrap 嵌套行 嵌套列 溢出 宽度不正确 栅格化系统计算

    bootstrap 当嵌套列时 有时会出现很奇异的row 的width不对问题出现的情况时 <div class="row" > <!--row a--> ...

  2. 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)

    参考链接: 依赖注入(DI) or 控制反转(IoC) laravel 学习笔记 —— 神奇的服务容器 PHP 依赖注入,从此不再考虑加载顺序 名词解释 IoC(Inversion of Contro ...

  3. spring boot使用自定义配置的线程池执行Async异步任务

    一.增加配置属性类 package com.chhliu.springboot.async.configuration; import org.springframework.boot.context ...

  4. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第六课 CronTrigger

    第六课 CronTrigger CronTrigger比SimpleTrigger更常用,当你需要一个基于日历般概念的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间. 使用Simp ...

  5. 20155301 2016-2017-2 《Java程序设计》第6周学习总结

    20155301 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 1.串流设计,在数据来源与目的地之间,简介两者的是串流对象,在来源于目的地都不知道的情况下, ...

  6. 20155315 2016-2017-2 《Java程序设计》第五周学习总结

    教材学习内容总结 第8章 异常处理 1.使用try...catch 与C语言中程序流程和错误处理混在一起不同,Java中把正常流程放try块中,错误(异常)处理放catch块中. 如果父类异常对象在子 ...

  7. input新类型详解

    http://www.webhek.com/post/html5-input-type.html

  8. HDU 2073 叠框

    解题报告:一个字符串的题,最恶心的还是格式问题,PE了很多次,要求是每个测试数据的后面都带有一个空行,但是最后一个不能有空行,所以只能把第一组 数据的前面不输出空行,而后面的每一组数据都输出空行,这样 ...

  9. extern函数声明(转)

    转自:chao_yu extern 函数声明 常常见extern放在函数的前面成为函数声明的一部分,那么,C语言的关键字extern在函数的声明中起什么作用? 答案与分析: 如果函数的声明中带有关键字 ...

  10. 矩阵 matrix

    传送门 注意这题时限是2s [问题描述] 有一个n × m的矩阵,你从左上角走到右下角,只能向下和向右走. 每个点上有一个重量v i,j 价值w i,j 的物品,你有一个容量为S的背包,经过一个点你可 ...