C#基础语法补充
[学习笔记]前接: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#基础语法补充的更多相关文章
- Java基础知识二次学习-- 第二章 基础语法与递归补充
第二章 基础语法与递归补充 时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下 ...
- JavaScript学习笔记-基础语法、类型、变量
基础语法.类型.变量 非数字值的判断方法:(因为Infinity和NaN他们不等于任何值,包括自身) 1.用x != x ,当x为NaN时才返回true; 2.用isNaN(x) ,当x为NaN或 ...
- Swift基础语法学习总结
Swift基础语法学习总结Swift高级语法学习总结Swift语法总结补充(一) 1.基础 1.1) swift还是使用// 和/* */ 来注释,并且/* */允许多行注释. 1.2) swift ...
- swift3.0基础语法
swift 3.0 基础语法 目录 01-变量和常量 02-运算符 03-可选项 04-条件语句 05-循环 06-字符串 07-元组 08-数组 09-字典 10-对象和类 11-枚举 12-属性 ...
- Python3 与 C# 基础语法对比(就当Python和C#基础的普及吧)
文章汇总:https://www.cnblogs.com/dotnetcrazy/p/9160514.html 多图旧排版:https://www.cnblogs.com/dunitian/p/9 ...
- 基础运算符补充,流程控制之if判断/while循环
常量 常量即指不变的量.在python中没有一个专门 的语法代表常量,程序员约定俗成地用变量名全部被大写代表常量. AGE_OF_OLDBOY = 56 基础运算符补充 1.算术运算 加减乘除+ - ...
- JavaSE入门学习7:Java基础语法之语句(下)
继续接着Java基础语法来:JavaSE入门学习5:Java基础语法(一)和JavaSE入门学习6:Java基础语法(二). 语句 Java经常使用的3种循环:while.do...while,for ...
- Hive学习笔记:基础语法
Hive基础语法 1.创建表 – 用户表 CREATE [EXTERNAL外部表] TABLE [IF NOT EXISTS 是否存在] HUserInfo ( userid int comment ...
- JavaScript的基础语法
对于Javascript的而言没有数据类型的全部都是通过var来定义创建的.比如: <!DOCTYPE html> <html> <head> <meta c ...
随机推荐
- Vue入坑教程(一)——搭建vue-cli脚手架
1. Vue简介 详细内容可以参考官网Vue.js 1)兼容性 Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性.但它支持所有兼容 ECMA ...
- Chrome浏览器F12讲解
Chrome浏览器相对于其他的浏览器而言,DevTools(开发者工具)非常强大.这节课将为大家介绍怎么利用Chrome浏览器的开发者工具进行HTTP请求分析 Chrome浏览器讲解 Chrome 开 ...
- Docker删除镜像报错
问题描述: 笔者意图删除nginx-file的镜像文件,但通过命令删除镜像时出现报错信息,提示存在多个引用(即一个IMAGE可被多个REPOSITORY引用,故删除会出现失败),如下: [root@k ...
- Mac下MySQL的卸载
先停止所有mysql有关进程. 打开控制台一次复制下列所有内容: sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm -rf ...
- 令assignment操作符返回一个reference to *this
[令assignment操作符返回一个reference to *this] 关于赋值,可以把它们写成连锁形式: int x, y, z; x =y =z =15; II赋值连锁形式 上述连锁赋值被解 ...
- [译]Quartz.NET 框架 教程(中文版)2.2.x 之第八课 调度监听器
第八课 调度监听器 调度监听器和触发监听器和触发监听器.作业任务监听器非常相似,只是调度监听器在调度器内接收通知事件,而不需要关联具体的触发器或作业任务事件. 跟调度监听器相关的事件,添加作业任务/触 ...
- 动态引用外部的Javascript脚本文件[转]
你可以参考下面方法,进行动态为网页引用外部的Javascript脚本文件.代码写在Page_Init方法内. VB.NET: 下图是运行时,查看HTML的源代码: C#:
- 【BZOJ】2006: [NOI2010]超级钢琴
[题意]给定长度为n的整数序列,求长度为[L,R]的前k大区间和的和.n,k<=500000. [算法]堆+贪心+RMQ [题解]考虑暴力是取所有长度为[L,R]的子串的前k大求和,复杂度O(n ...
- 2017 ACM暑期多校联合训练 - Team 9 1008 HDU 6168 Numbers (模拟)
题目链接 Problem Description zk has n numbers a1,a2,...,an. For each (i,j) satisfying 1≤i<j≤n, zk gen ...
- Django认证系统实现的web页面
结合数据库.ajax.js.Djangoform表单和认证系统的web页面 一:数据模块 扩展了Django中的user表,增加了自定义的字段 from django.db import models ...