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( Exce...
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...
C#笔记(25)预处理器指令
C# 预处理器指令预处理器指令指导编译器在实际编译开始之前对信息进行预处理。 所有的预处理器指令都是以 # 开始。且在一行上,只有空白字符可以出现在预处理器指令之前。预处理器指令不是语句,所以它们不以分号(;)结束。 C# 编译器没有一个单独的预处理器,但是,指令被处理时就像是有一个单独的预处理器一样。在 C# 中,预处理器指令用于在条件编译中起作用。与 C 和 C++ 不同的是,它们不是用来创建宏。一个预处理器指令必须是该行上的唯一指令。 C# 预处理器指令列表下表列出了 C# 中可用的预处理器指令: 预处理器指令 描述 #define 它用于定义一系列成为符号的字符。 #undef 它用于取消定义符号。 #if 它用于测试符号是否为真。 #else 它用于创建复合条件指令,与 #if 一起使用。 #elif 它用于创建复合条件指令。 #endif 指定一个条件指令的结束。 #line 它可以让您修改编译器的行数以及(可选地)输出错误和警告的文件名。 #error 它允许从代码的指定位置生成一个错误。 #warning 它允许从代码的...
C#笔记(24)命名空间(Namespace)
命名空间(Namespace)命名空间的设计目的是提供一种让一组名称与其他名称分隔开的方式。在一个命名空间中声明的类的名称与另一个命名空间中声明的相同的类的名称不冲突。 我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。 定义命名空间命名空间的定义是以关键字 namespace 开始,后跟命名空间的名称,如下所示: 1234namespace namespace_name{ // 代码声明} 为了调用支持命名空间版本的函数或变量,会把命名空间的名称置于前面,如下所示: 1namespace_name.item_name; 下面的程序演示了命名空间的用法: 实例1234567891011121314151617181920212223242526272829303132using System;namespace first_space{ class namespace_cl { public void func() ...
C#笔记(23)接口(Interface)
接口(Interface)接口定义了所有类继承接口时应遵循的语法合同。接口定义了语法合同 “是什么” 部分,派生类定义了语法合同 “怎么做” 部分。 接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。 接口使得实现接口的类或结构在形式上保持一致。 抽象类在某种程度上与接口类似,但是,它们大多只是用在当只有少数方法由基类声明由派生类实现时。 接口本身并不实现任何功能,它只是和声明实现该接口的对象订立一个必须实现哪些行为的契约。 抽象类不能直接实例化,但允许派生出具体的,具有实际功能的类。 定义接口: MyInterface.cs接口使用 interface 关键字声明,它与类的声明类似。接口声明默认是 public 的。下面是一个接口声明的实例: 1234interface IMyInterface{ void MethodToImplement();} 以上代码定义了接口 IMyInterface。通常接口命令以 I 字母开头,这个接口只有一个方法 MethodToImp...
C#笔记(22)运算符重载
C# 运算符重载您可以重定义或重载 C# 中内置的运算符。因此,程序员也可以使用用户自定义类型的运算符。重载运算符是具有特殊名称的函数,是通过关键字 operator 后跟运算符的符号来定义的。与其他函数一样,重载运算符有返回类型和参数列表。 例如,请看下面的函数: 12345678public static Box operator+ (Box b, Box c){ Box box = new Box(); box.length = b.length + c.length; box.breadth = b.breadth + c.breadth; box.height = b.height + c.height; return box;} 上面的函数为用户自定义的类 Box 实现了加法运算符(+)。它把两个 Box 对象的属性相加,并返回相加后的 Box 对象。 运算符重载的实现下面的程序演示了完整的实现: 实例123456789101112131415161718192021222324252627282930313233343536...
C#笔记(21)多态性
C# 多态性多态是同一个行为具有多个不同表现形式或形态的能力。 多态性意味着有多重形式。在面向对象编程范式中,多态性往往表现为”一个接口,多个功能”。 多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的。 在 C# 中,每个类型都是多态的,因为包括用户定义类型在内的所有类型都继承自 Object。 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 现实中,比如我们按下 F1 键这个动作: 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档; 如果当前在 Word 下弹出的就是 Word 帮助; 在 Windows 下弹出的就是 Windows 帮助和支持。 同一个事件发生在不同的对象上会产生不同的结果。 静态多态性在编译时,函数和对象的连接机制被称为早期绑定,也被称为静态绑定。C# 提供了两种技术来实现静态多态性。分别为: 函数重载 运算符重载 运算符重载将在下一章节讨论,接下来我们将讨论函数重载。 函数重载您可以在同一个范围内对相同的函数名有多个定义。函数的定义必须彼此不同,...
C#笔记(20)继承
C# 继承继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基类,这个新的类被称为派生类。 继承的思想实现了 属于(IS-A) 关系。例如,哺乳动物 属于(IS-A) 动物,狗 属于(IS-A) 哺乳动物,因此狗 属于(IS-A) 动物。 基类和派生类一个类可以派生自多个类或接口,这意味着它可以从多个基类或接口继承数据和函数。 C# 中创建派生类的语法如下: 12345678<访问修饰符> class <基类>{ ...}class <派生类> : <基类>{ ...} 假设,有一个基类 Shape,它的派生类是 Rectangle: 实例1234567891011121314151617181920212223242526272829303132333435...
C#笔记(19)类(Class)
类(Class)当你定义一个类时,你定义了一个数据类型的蓝图。这实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作。对象是类的实例。构成类的方法和变量称为类的成员。 类的定义类的定义是以关键字 class 开始,后跟类的名称。类的主体,包含在一对花括号内。下面是类定义的一般形式: 12345678910111213141516171819202122<access specifier> **class** class_name{ *// member variables* <access specifier> <data type> variable1; <access specifier> <data type> variable2; ... <access specifier> <data type> variableN; *// member methods* <access specifier&g...
C#笔记(18)枚举(Enum)
C# 枚举(Enum)枚举是一组命名整型常量。枚举类型是使用 enum 关键字声明的。 C# 枚举是值类型。换句话说,枚举包含自己的值,且不能继承或传递继承。 声明 enum 变量声明枚举的一般语法: 1234enum <enum_name>{ enumeration list }; 其中, enum_name 指定枚举的类型名称。 enumeration list 是一个用逗号分隔的标识符列表。 枚举列表中的每个符号代表一个整数值,一个比它前面的符号大的整数值。默认情况下,第一个枚举符号的值是 0.例如: 1enum Days { Sun, Mon, tue, Wed, thu, Fri, Sat }; 实例下面的实例演示了枚举变量的用法: 1234567891011121314using System;public class EnumTest{ enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void M...
C#笔记(17)结构体(Struct)
结构体(Struct)在 C# 中,结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。struct 关键字用于创建结构体。 结构体是用来代表一个记录。假设您想跟踪图书馆中书的动态。您可能想跟踪每本书的以下属性: Title Author Subject Book ID 定义结构体为了定义一个结构体,您必须使用 struct 语句。struct 语句为程序定义了一个带有多个成员的新的数据类型。 例如,您可以按照如下的方式声明 Book 结构: 1234567struct Books{ public string title; public string author; public string subject; public int book_id;}; 下面的程序演示了结构的用法: 实例1234567891011121314151617181920212223242526272829303132333435363738394041424344454647using System;using System.Te...
