C#学习
文章平均质量分 70
学习C#语言的知识点,主要参考《C#程序设计教程(第2版)》(唐大仕版)
不导翁
这个作者很懒,什么都没留下…
展开
-
C#学习笔记 XML
使用TextWriter 来生成 XML文件,该程序用的是SAX方式: #region 使用SAX方式处理XML static void XmlTextWriteTest() { const string filename = "sampledate.xml"; XmlTextWriter writer; writer = new XmlTextWriter(filename, null); // 为使文件易读,使用缩进 writer.Formatting = Formattin原创 2021-03-14 19:51:13 · 138 阅读 · 0 评论 -
C#学习笔记 正则表达式
正则表达式是用来表示字符串模式的表达式,如[0 - 9]{4}表示4个数字,可以认为它是复杂的通配符,它主要用来从文中查找到某一类字符串。1.正则表达式的基本元素正则表达式实际上是用来匹配某种格式的字符串的模式。一个模式主要有三种要素构成:位置、字符和量词(字符个数)。例如: ^[0-9]{4}其中,^表示要求字符串出现在行首,[0-9]表示要匹配的是数字,{4}表示数字字符是4个,例如它可以匹配出现在行首的1998、2022等。详细内容见下表:一些实例:a..c——能够匹配“abbc”原创 2021-03-11 22:02:08 · 584 阅读 · 0 评论 -
C#学习笔记 文件、目录、注册表
文件(file)是存储在磁盘上的一组信息的集合;目录(directory),即文件夹,是组织多个文件的方式;注册表(registry)则是操作系统中存储各种配置信息的其中地(数据库)。文件与目录管理C#支持文件管理和目录管理,它们由System.IO命名空间中的相关类来实现。这些类不是Stream或者TextReader的子类,因为它们不负责内容的输入/输出,而是用来专门管理磁盘文件和目录的。文件和目录由System.IO命名空间中的6个类来表示。① FileSystemInfo——FileInf原创 2021-03-09 11:39:21 · 309 阅读 · 2 评论 -
C#学习笔记 文本输入/输出
使用Reader和Writer的文本I/OTextWriter类和TextReader类是基于文本的抽象类,它们的重要子类包括:StreamWriter、StreamReader,处理流的操作;StringWriter、StringReader,处理字符串的操作。注意:对于C程序员来说,StreamWriter类似于printf()或者fprintf(),而StringWriter类似于sprintf()。1.TextWriterTextWriter是一个抽象基类,它包含下面一些子类:① 用来为浏原创 2021-03-07 21:30:36 · 1649 阅读 · 1 评论 -
C#学习笔记 二进制输入输出
1.BinaryReader类和BinaryWriter类BinaryReader和BinaryWriter可以用来进行二进制输入/输出,也就是用来读写基本的数据类型(如int,double等),而不是原始的字节类型。BinaryReader和BinaryWriter不是Stream类的子类,但它是对Stream流进行包装,在构造BinaryReader和BinaryWriter对象时,需要一个Stream对象作为其参数。如: new BinaryReader(myStream);实际上,这两种类主原创 2021-03-05 22:16:34 · 2300 阅读 · 0 评论 -
C#学习笔记 流
为进行数据的输入输出操作原创 2021-03-04 20:24:56 · 146 阅读 · 1 评论 -
C#学习笔记 Linq
Linq的基本用法Linq,语言集成查询(language intergrated query)是一组用于C#的扩展。使用Linq可以对集合等内存数据进行查询,还可以查询数据库(datebase)、XML(标准通用标记语言)数据,分别称为Linq to object,Linq to datebase和Linq to XML。这里谈的是Linq to object。Linq的写法类似于数据库SQL语句的查询语法。 from 变量名 in 集合 where 条件 select 结果变量其中,变量名是一原创 2021-03-03 23:58:51 · 1028 阅读 · 2 评论 -
C#学习笔记 自己写排序
Swap交换函数 private static void Swap(ref T t1, ref T t2) { T tmp = t1; t1 = t2; t2 = tmp; }选择排序 #region 选择排序算法 public static void SelectSort(T[] arr) { for (int i = 0; i < arr.Length - 1; i++) { int minIndex = i; // 最终最小值的位置 for (int原创 2021-03-03 21:01:31 · 121 阅读 · 1 评论 -
C#学习笔记 排序与查找
IComparable接口和IComparer接口为了能够对数据项进行排序,就要确定两个数据项在列表中的相对位置,也就是要确定两个对象的“大小”关系。一般来说有如下两种方式来定义大小关系:第一种方式是针对对象本身。为了使对象自己能够执行比较操作,该对象必须实现IComparable接口,即至少具有一个CompareTo()成员。System.IComparable接口中有一个方法,如下: int CompareTo(object obj);它根据当前对象与要比较的对象的“大小”来返回一个正数、0原创 2021-03-03 14:27:46 · 319 阅读 · 0 评论 -
C#学习笔记 unsafe及指针
为了便于与C/C++等语言交互,在C#中保留了指针的概念。但是对指针的使用做了严格的限定,所以不要认为可以像C语言那样自由的使用指针。指针必须在“非安全环境(unsafe)”中使用。1.unsafeunsafe关键字表示不安全的上下文。任何设计指针的操作都要求不安全的上下文。unsafe用作结构、类、方法、属性、委托等的修饰符。例如: static unsafe void FastCopy(byte[] src, byte[] dst, int count){ // ... ... }若要编原创 2021-02-27 14:58:09 · 1087 阅读 · 0 评论 -
C#学习笔记 编译预处理
编译预处理(pre - processing),是指编译之前的处理,它曾经是C/C++语言中相当重要的语法成分。C#语言中保留了部分预处理功能。但去掉了容易出错或者繁琐的成分,特别是去掉了#include和定义可替换的宏定义(#define)等。编译预处理是通过一些预处理指令来完成的。每个预处理指令单独占一行,都以 #好开始。预处理指令可以分成标识声明、条件处理、信息报告、行号标记四类。1.标识符声明在预处理过程中,可以对标识符进行定义和取消定义。#define 定义一个标识符;#undef "取消原创 2021-02-27 14:22:40 · 252 阅读 · 0 评论 -
C#学习笔记 Attribute(特性)
简单地说,特性(Attribute)是与类、结构、方法等元素相关的额外信息,是对元信息的扩展。通过Attribute可以使程序、甚至语言本身的功能得到增强。Attribute是C#中一种特有的语法成分,它可以作用于各种语言要素,如命名空间、类、方法、字段、属性、索引器,等等,都可以附加上一些特定的声明信息。Attribute与元数据一起存储于程序集中,编译器或者其他程序可以读取并利用这些信息。...原创 2021-02-27 13:46:37 · 730 阅读 · 0 评论 -
C#学习笔记 运算符重载
运算符(operator)也称操作符,是指+,-,*等,C#中允许对用户定义的类型重新定义各种运算符的意义,这就是运算符重载(operator overloading)。比如,两个日期时间(DateTime)相减,表示两个日期的时间间隔(TimeSpan);而日期时间加上一个时间间隔则得到另一个日期时间: DateTime now = DateTime.Now; DateTime start = new DateTime(2000, 1, 1); TimeSpan c = now - start;原创 2021-02-26 23:04:59 · 102 阅读 · 0 评论 -
C#学习笔记 factory模式
嵌套类型的一个应用——factory模式(工厂模式)。所谓factory模式,是指一个能产生某种“产品”的“工厂”,其中产生产品只能由工厂产生。例如一个银行账号(Account)只能有银行(Bank)来产生。在C#中,账号可以由Bank的内部类(Account)来实现,在这里内部类是private的,不能由外部进行访问,只能通过一个接口(ICount)来访问。例NestedBankAccount.cs通过嵌套类来实现Factory模式的银行账号:using System;using System.Co原创 2021-02-26 21:18:01 · 707 阅读 · 0 评论 -
C#学习笔记 命名空间
命名空间1.命名空间的概念命名空间(namespace)是对各种类型的名字进行层次规划的方式,命名空间实际上提供了一种命名机制,同时也是程序进行逻辑组织的方式。命名空间是一些类型的松散的集合,一般不要求处于同一命名空间的类有明确的相互关系,如包含、继承等。为了方便编程和管理,通常把需要在一起工作的类型放在一个命名空间里。如System命名空间下有各种类和接口,包括System.Console,System.String,System.Random,System.Math,System.GC,Syste原创 2021-02-26 17:18:41 · 635 阅读 · 0 评论 -
C#学习笔记 异常处理
System.Exception类C#中定义了很多异常类,C#的异常类都是System.Exception的子类。它派生了两个子类:SystemException和ApplicationException。其中前者是系统定义的各种异常,后者则提供应用程序使用。Exception的构造方法常用的有两个:public Exception();public Exception(string s);第二个构造方法可以接受字符串参数传入的信息,该信息通常是对该例外所对应的错误的描述。Exception类有原创 2021-02-26 01:32:53 · 648 阅读 · 0 评论 -
C#学习笔记 事件
事件(event)是在委托的基础上实现的一种“通知机制”。比如,当一个按钮被点击,就是一个事件,事件的发生可以通知相关的程序进行处理。事件相当于其他语言中的回调函数,或事件监听类。对于Button类来说,Click是其中一个特殊的属性,它就代表一个事件,它的类型是EventHandler委托,是的,关于事件有几个关键点:在一个类中定义一个事件,事件的类型是一个委托类型在外面用 += 来注册这个事件,即将一个外部方法关联上了在事件源所在的类中,在一定条件下(即事件发生了)来调用这个委托,实际上是调用原创 2021-02-25 23:59:22 · 113 阅读 · 0 评论 -
C#学习笔记 Action及Func
系统中定义好了一些常用的委托,这就是System.Action及System.Func,前者并没有返回值的函数,后者表示有返回值的函数。为了方便适应不同参数个数,系统定义了一系列Action及Func,如下图所示:其中,每个委托的参数类型在使用时是可以自定义的,即使用了泛型,如表示两个整数为参数、返回一个double类型,则可以表示为: Func<int, int, double> f = (x, y) => x * 3.0 + y * 2.0;又比如只带一个字符串参数、返回类型原创 2021-02-25 17:07:19 · 237 阅读 · 0 评论 -
C#学习笔记 Lambda表达式
在委托实例化时,总要使用一个函数,所以我们去单独定义一个函数,但是在更多的时候,我们不想这样做,而是直接定义函数、直接使用,这时可以使用匿名函数或Lambda表达式,它们分别是C#2.0 和C#3.0 中引入的。Lambda表达式Lambda表达式(或者叫λ表达式),实际上是直接写函数头和函数体,而不写函数名,在函数头和函数体之前用符号 => 来表示。并且将这个函数直接赋给一个委托或作为另一个函数的参数。例如: MyDelegate d = (double x) => { return x原创 2021-02-25 17:06:04 · 240 阅读 · 0 评论 -
C#学习笔记 委托
委托(delegate)与事件(event)是C#中提出的独特的概念,简单地说,委托是“函数指针”在C#中的更好实现,而事件是“回调函数”在C#中的更好实现。委托类型与赋值可以认为委托类似于函数指针,它是一种引用类型,它引用的就是函数。委托所引用的函数是有一定类型的,一个委托类型表示函数的签名(函数的参数类型及顺序),所以可以认为是类型安全的,即一种委托类型不能引用与之不兼容的任意类型;而一个委托实例可以表示一个具体的函数,及某个类的实例方法或静态方法,所以可以将委托理解为函数的包装或引用。1.委托原创 2021-02-24 23:54:10 · 156 阅读 · 0 评论 -
C#学习笔记 泛型
泛型泛型(generic)是C#中一个重要概念,简单地说,泛型是编写一个类可以针对不同的类型。即通过参数化类型来实现同一份代码上操作多种数据类型。泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。C#是在2.0 版本中开始引入泛型的。泛型的基本使用考虑这样一个问题:如果要定义一个含有多个元素的列表集合List,有加入。删除、查找等功能,但是为了表示元素的类型可以是各种类型(如int,string,Point,Person等),如果不适用泛型,则有两种方法,一是针对每一种原创 2021-02-24 21:55:55 · 345 阅读 · 0 评论 -
C#学习笔记 结构、枚举
结构结构(struct)是一种对数据及功能进行封装的数据结构,与类(class)相比最大不同是:结构是值类型,而类是引用类型。一般结构用于比类(class)更简单的对象。结构的声明与使用与类一样,结构可以包含各种成员,如:构造函数、常数、字段、方法、属性、索引器、事件、运算符和嵌套的值类型。同时,结构也可以实现接口。结构的类型声明格式如下:struct 结构名 [:接口名]{ ...}struct 结构类型适合表示如点、矩阵和颜色这样的简单数据结构。例如:struct Point {原创 2021-02-24 09:55:01 · 125 阅读 · 0 评论 -
C#学习笔记 接口
接口C#中的接口(interface)在语法上有些类似与抽象类(abstract class),它定义了若干个抽象方法、属性、索引器、事件,形成一个抽象成员的集合,每个成员通常反映事物某些方面的功能。接口在本质上是对某方面功能或特征的约定。程序中的接口的用处主要体现在下面几个方面:通过接口可以实现不相关类的相同行为,而不需要考虑这些类之间的层次关系。通过接口可以指明多个类需要实现的方法。通过接口可以了解对象的交互界面,而不需要了解对象所对应的类。定义接口定义接口使用interface关键字原创 2021-02-23 02:34:54 · 277 阅读 · 1 评论 -
C#学习笔记 单例模型
单例(singleton)也叫单子模型,是指在某个类中只有一个实例,调用者可以获取该实例,并且这个实例是唯一的。实现这种模型的方法,首先将该类中的构造方法设定为private,使得外部调用者不能直接用new来进行创建实例;然后在该类中,用static的字段来存放该类的唯一实例,并将该实例一public方法向外进行公开。这里利用了private,public,static等修饰符来实现这一模型。代码如下using System;namespace ConsoleApp12单例 { class原创 2021-02-21 02:01:42 · 111 阅读 · 0 评论 -
C#学习笔记 修饰符
访问控制符C#中的访问控制符有5个,其中基本的有4个:public,protected,private,internal,还有1个复合的修饰符protected internal(也可以写成internal protected)。类的成员的可访问性有两个方面的含义:一种是基于逻辑的,例如protected表示其子类也可以访问;一种是基于物理的,即可访问性跟是否在同一程序集(assembly)中有关,如internal表明在同一程序集类可访问。程序集,也称“程序装配”,是指编译时将多个类(编译后的M原创 2021-02-21 01:43:29 · 239 阅读 · 0 评论 -
C#学习笔记 类的继承
类的继承继承(inheritance)是面向对象程序设计中最为重要的特征之一。C#中不支持多重继承。父类实际上是所有子类的公共字段和公共方法的集合,而每一个子类则是父类的特殊化,是对字段和方法在功能、内涵方法的扩展和延伸。派生子类C#中类的继承格式如下: class SubClass:BaseClass{ ...... }如果缺省冒号及父类名,则该类为object(即System.Object)的子类。因此,在C#中,所有的类都是通过直接或间接地继承object得到的,或者说,所有的类都是原创 2021-02-20 21:39:11 · 354 阅读 · 0 评论 -
C#学习笔记 属性、索引器
属性属性(property)是表达事物的状态的,属性的存取方式可以是读(读取),也可以是写(存放),读、写属性分别用get及set来进行表示。 修饰符 类型名 属性名{ get{ // 读 } set{ // 写 } }属性与字段的比较:属性可以实现只读或只写,而字段不能。属性的set方法可以对用户指定的值(value),进行有效性检查,从而保证只有正确的状态才会得到设置,而字段不能。属性的get方法不仅可以返回字段变量的值,还可以返回一些经过计算或处理过的数据。由于属性原创 2021-02-20 00:59:51 · 434 阅读 · 1 评论