C#笔记(35)集合(Collection)
集合(Collection)集合(Collection)类是专门用于数据存储和检索的类。这些类提供了对栈(stack)、队列(queue)、列表(list)和哈希表(hash table)的支持。大多数集合类实现了相同的接口。
集合(Collection)类服务于不同的目的,如为元素动态分配内存,基于索引访问列表项等等。这些类创建 Object 类的对象的集合。在 C# 中,Object 类是所有数据类型的基类。
什么是集合?
在 C# 中存储大量数据时,除了使用数组外,还可使用另外一种容器:集合。
相比数组不能修改长度的缺点,集合在进行操作时,对集合中的元素进行增删改查操作,作用都是原集合,而不会产生新的集合。
另外,有一些集合中还可以存储任意类型的数据。
ArrayListArrayList 介绍
底层就是一个可动态扩展的数组;
提供了用于在集合中添加、删除或查找项的方法;
ArrayList 集合不支持泛型(即:可放任意类型的数据);
使用 ArrayList 集合之前,应先导入命名命名空间:
using System.Collections ;
用于unity开发的话已 ...
C#笔记(34)事件(Event)
事件(Event)事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。
C# 中使用事件机制实现线程间的通信。
通过事件使用委托事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。
发布器(publisher) 是一个包含事件和委托定义的对象。事件和委托之间的联系也定义在这个对象中。发布器(publisher)类的对象调用这个事件,并通知其他的对象。
订阅器(subscriber) 是一个接受事件并提供事件处理程序的对象。在发布器(publisher)类中的委托调用订阅器(subscriber)类中的方法(事件处理程序)。
声明事件(Event)在类的内部声明事件,首先必须声明该事件的委托类型。例如:
1public delegate void BoilerL ...
C#笔记(33)委托(Delegate)
委托(Delegate)C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
声明委托(Delegate)委托声明决定了可由该委托引用的方法。委托可指向一个与其具有相同标签的方法。
例如,假设有一个委托:
1public delegate int MyDelegate (string s);
上面的委托可被用于引用任何一个带有一个单一的 string 参数的方法,并返回一个 int 类型变量。
声明委托的语法如下:
1delegate <return type> <delegate-name> <parameter list>
实例化委托(Delegate)一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有 ...
C#笔记(32)索引器(Indexer)
索引器(Indexer)索引器(Indexer) 允许一个对象可以像数组一样使用下标的方式来访问。
当您为类定义一个索引器时,该类的行为就会像一个 虚拟数组(virtual array) 一样。您可以使用数组访问运算符 [ ] 来访问该类的的成员。
语法一维索引器的语法如下:
1234567891011121314element-type this[int index]{ // get 访问器 get { // 返回 index 指定的值 } // set 访问器 set { // 设置 index 指定的值 }}
索引器(Indexer)的用途索引器的行为的声明在某种程度上类似于属性(property)。就像属性(property),您可使用 get 和 set 访问器来定义索引器。但是,属性返回或设置一个特定的数据成员,而索引器返回或设置对象实例的一个特定值。换句话说,它把实例数据分为更小的部分,并索引每个部分,获取或设置每个部分。
定义一个属性(property)包括 ...
C#笔记(31)属性(Property)
属性(Property)属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。类或结构中的成员变量或方法称为 域(Field)。属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。它们使用 访问器(accessors) 让私有域的值可被读写或操作。
属性(Property)不会确定存储位置。相反,它们具有可读写或计算它们值的 访问器(accessors)。
例如,有一个名为 Student 的类,带有 age、name 和 code 的私有域。我们不能在类的范围以外直接访问这些域,但是我们可以拥有访问这些私有域的属性。
访问器(Accessors)属性(Property)的访问器(accessor)包含有助于获取(读取或计算)或设置(写入)属性的可执行语句。访问器(accessor)声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。例如:
123456789101112131415161718192021222324252627282930313233343536373 ...
C#笔记(30)反射(Reflection)
反射(Reflection)反射指程序可以访问、检测和修改它本身状态或行为的一种能力。
程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。
您可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。
优缺点优点:
1、反射提高了程序的灵活性和扩展性。
2、降低耦合性,提高自适应能力。
3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。
缺点:
1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。
2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。
反射(Reflection)的用途反射(Reflection)有下列用途:
它允许在运行时查看特性(attribute)信息。
它允许审查集合中的各种类型,以及实例化这些类型。
它允许延迟绑定的方法和属性(pro ...
C#笔记(29)特性(Attribute)
特性(Attribute)特性(Attribute)是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。您可以通过使用特性向程序添加声明性信息。一个声明性标签是通过放置在它所应用的元素前面的方括号([ ])来描述的。
特性(Attribute)用于添加元数据,如编译器指令和注释、描述、方法、类等其他信息。.Net 框架提供了两种类型的特性:预定义特性和自定义特性。
规定特性(Attribute)规定特性(Attribute)的语法如下:
12[attribute(positional_parameters, name_parameter = value, ...)]element
特性(Attribute)的名称和值是在方括号内规定的,放置在它所应用的元素之前。positional_parameters 规定必需的信息,name_parameter 规定可选的信息。
预定义特性(Attribute).Net 框架提供了三种预定义特性:
AttributeUsage
Conditional
Obsolete
AttributeUsage预定义 ...
C#笔记(28)文件的输入与输出
文件的输入与输出一个 文件 是一个存储在磁盘中带有指定名称和目录路径的数据集合。当打开文件进行读写时,它变成一个 流。
从根本上说,流是通过通信路径传递的字节序列。有两个主要的流:输入流 和 输出流。输入流用于从文件读取数据(读操作),输出流用于向文件写入数据(写操作)。
C# I/O 类System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。
下表列出了一些 System.IO 命名空间中常用的非抽象类:
I/O 类
描述
BinaryReader
从二进制流读取原始数据。
BinaryWriter
以二进制格式写入原始数据。
BufferedStream
字节流的临时存储。
Directory
有助于操作目录结构。
DirectoryInfo
用于对目录执行操作。
DriveInfo
提供驱动器的信息。
File
有助于处理文件。
FileInfo
用于对文件执行操作。
FileStream
用于文件中任何位置的读写。
MemoryStream
用于随机访问存 ...
Git报错:unable to access ‘git仓库地址‘: OpenSSL SSL_read:Connection was reset, errno 10054
错误errno 10054
在git push 或者git clone 出现这个错误
12fatal: unable to access 'https://github.com/******/******.git/': OpenSSL SSL_read: Connection was reset, errno 10054
原因推测
产生原因推测:一般是这是因为服务器的SSL证书没有经过第三方机构的签署或认证
尝试探究原因,发现报错的文字中有open_SSL,发现这个是https的加密协议,所以我把下载好的文件删除,再次下载,这次使用http协议,而非https
在未登录情况下,默认是不能使用https协议下载github上面的文件了,这是github内部做了处理,又或者是https本身自带的拦截,而http协议属于未加密,它不会拦截下载请求。
把https换成git也可以下载,应该是github内部自定义的通信协议,所以git协议也不会拦截下载请求,所以git协议也可以下载;
如果是登录情况下,https协议则不会拦截,也可以下载文件。
解决方案
...
C#笔记(27)异常处理
异常处理异常是在程序执行期间出现的问题。C# 中的异常是对程序运行时出现的特殊情况的一种响应,比如尝试除以零。
异常提供了一种把程序控制权从某个部分转移到另一个部分的方式。C# 异常处理时建立在四个关键词之上的:try、catch、finally 和 throw。
try:一个 try 块标识了一个将被激活的特定的异常的代码块。后跟一个或多个 catch 块。
catch:程序通过异常处理程序捕获异常。catch 关键字表示异常的捕获。
finally:finally 块用于执行给定的语句,不管异常是否被抛出都会执行。例如,如果您打开一个文件,不管是否出现异常文件都要被关闭。
throw:当问题出现时,程序抛出一个异常。使用 throw 关键字来完成。
语法假设一个块将出现异常,一个方法使用 try 和 catch 关键字捕获异常。try/catch 块内的代码为受保护的代码,使用 try/catch 语法如下所示:
1234567891011121314151617181920try{ // 引起异常的语句}catch( Excepti ...
C#笔记(26)正则表达式
正则表达式正则表达式 是一种匹配输入文本的模式。
.Net 框架提供了允许这种匹配的正则表达式引擎。
模式由一个或多个字符、运算符和结构组成。
如果你还不理解正则表达式可以阅读菜鸟编程的正则表达式 - 教程。
定义正则表达式下面列出了用于定义正则表达式的各种类别的字符、运算符和结构。
字符转义
字符类
定位点
分组构造
限定符
反向引用构造
备用构造
替换
杂项构造
字符转义正则表达式中的反斜杠字符(\)指示其后跟的字符是特殊字符,或应按原义解释该字符。
下表列出了转义字符:
转义字符
描述
模式
匹配
\a
与报警 (bell) 符 \u0007 匹配。
\a
“Warning!” + ‘\u0007’ 中的 “\u0007”
\b
在字符类中,与退格键 \u0008 匹配。
[\b]{3,}
“\b\b\b\b” 中的 “\b\b\b\b”
\t
与制表符 \u0009 匹配。
(\w+)\t
“Name\tAddr\t” 中的 “Name\t” 和 “Addr\t”
\r
与回车符 \u000D 匹配。(\r 与换行符 \n 不是等效的。)
\r\n( ...
C#笔记(25)预处理器指令
C# 预处理器指令预处理器指令指导编译器在实际编译开始之前对信息进行预处理。
所有的预处理器指令都是以 # 开始。且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号(;)结束。
C# 编译器没有一个单独的预处理器,但是,指令被处理时就像是有一个单独的预处理器一样。在 C# 中,预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是,它们不是用来创建宏。一个预处理器指令必须是该行上的唯一指令。
C# 预处理器指令列表下表列出了 C# 中可用的预处理器指令:
预处理器指令
描述
#define
它用于定义一系列成为符号的字符。
#undef
它用于取消定义符号。
#if
它用于测试符号是否为真。
#else
它用于创建复合条件指令,与 #if 一起使用。
#elif
它用于创建复合条件指令。
#endif
指定一个条件指令的结束。
#line
它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。
#error
它允许从代码的指定位置生成一个错误。
#warning
它允许从代码的指定位 ...