C#基础知识

1. C#基础知识

1.1 语句包含内容

a) 命名空间声明(namespace)
b) Class
c) Class方法
d) Main方法
e) 语句&表达式
f) 注释
g) 文件后缀.cs

1.2 类型转换方法

a) Toboolean:把类型转换为布尔型
b) Tobyte:把类型转换为字节类型
c) Tochar:把类型转换为单个Unicode字符类型
d) Todatetime:把类型(整数或字符串类型)转换为日期–时间结构
e) Todecimal:把浮点型或整数类型转换为十进制类型。
f) Todouble:把类型转换为双精度浮点型
g) Toint16:把类型转换为16位整数类型
h) Toint32: 把类型转换为32位整数类型
i) Toint64: 把类型转换为64位整数类型
j) Tosbyte:把类型转换为有符号字节类型
k) Tosingle:把类型转换为小浮点数类型
l) Tostring:把类型转换为字符串类型
m) Totype:把类型转换为指定类型
n) Touint16:把类型转换为16位无符号整数类型
o) Touint32: 把类型转换为32位无符号整数类型
p) Touint64:把类型转换为64位无符号整数类型

1.3 变量类型

a) 值类型
b) 引用类型
c) 指针类型

1.4 支持的修饰符

1> Public:所有对象都可以访问
2> Private:对象本身在对象内部可以访问
3> Protected:只有该对象及其子类对象可以访问
4> Internal:同一程序集的对象可以访问
5> Protected internal:访问限于当前程序集或派生自包含类的类型
没有指定访问修饰符,则使用类成员的默认访问修饰符,即为private。

使用ref关键字声明引用参数:
引用参数是一个对变量的内存位置的引用,当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的的存储位置。引用参数表示与提供给参数表示与提供给方法的实际参数具有相同的内存位置。

封装被定义为“把一个或多个项目封闭在一个物理的或者逻辑的包中”。封装是为了防止对实现细节的访问。

可空类型:nullable
可空类型可以表示其基础值类型正常范围内的值,再加上一个null值。

Null合并运算符(??):用于定义可空类型和引用类型的默认值。

1.5 数组

交错数组是数组的数组
交错数组是一维数组

参数数组通常用于传递未知数量的参数给函数。

Array类:
Array类是C#中所有数组的基类,它是在system命名空间中定义。
Array类常用的属性:
1) Isfixedsize:获取值,该值指示数组是否带有固定大小
2) Isreadonly:获取一个值,该值指示数组是否只读
3) Length:获取一个32位整数,该值表示所有维度的数组的元素总数。
4) Longlength:获取一个64位整数,该值表示所有维度的数组中的元素总数。
5) Rank:获取数组的秩(维度)

Array类常用的方法:
1) Clear:根据元素的类型,设置数组中某个范围的元素为零、false或null
2) Copy(array,array,int32):从数组的第一个元素开始复制某个范围的元素到另一个数组的第一个元素位置,长度由一个32位整数指定。
3) Copyto(array,int32):从当前的一维数组中复制所有的元素到个指定的一维数组的指定索引位置,索引由一个32位整数指定。
4) Getlength:获取一个32位整数,该值表示指定维度数组中的元素总数
5) Getlonglength:获取一个64位整数,该值表示指定维度的数组中元素总和。
6) Getlowerbound:获取数组中指定维度的下界
7) Gettype:获取当前实例的类型,从对象(object)中继承
8) Getupperbound:获取数组中指定维度的上界
9) Getvlaue(int32):获取一维数组中指定位置的值,索引由一个32位整数指定。
10) Indexof(array,object):搜索指定对象,返回整个一维数组中第一次出现的索引
11) Reverse(array):逆转整个一维数组中元素的顺序
12) Setvlaue(object,int32):给一维数组中指定位置的元素设置值,索引由一个32位整数指定。
13) Sort(array):使用数组的每个元素的icomperable实现来排序整个一维数组的元素。
14) Tostring:返回一个表示当前对象的字符串,从对象(object)继承。

1.6 结构体

Struct关键字用于创建结构体,结构体是用来代表一个记录。
C#中结构体的特点:

  1. 结构可带有方法、字段、索引、属性、运算符和事件。
  2. 结构可定义构造函数,但不能定义无参数的构造函数,且不能定义析构函数。
  3. 与类不同,结构不能继承其他的结构或类。
  4. 结构不能作为其他结构或类的基础结构。
  5. 结构可实现一个或多个接口。
  6. 结构成员不能指定为abstract、virtual或protected。
  7. 与类不同,结构不能使用new操作符实例化。
  8. 只有在所有字段都初始化之后,字段才被赋值,对象才能使用。

1.7 析构函数

析构函数用于结束程度之前释放资源,析构函数不能继承或重载。

1.8 Static关键字

静态类
类中只有一个该成员的实例
静态变量
可在成员函数或类的定义外部进行初始化
静态函数
只能访问静态变量

1.9 命名空间

提供一组名称与其他名称分隔开的方式,以namespace开始,后跟命名空间的名称。
Using关键字表名程序使用给定命名空间的名称。

Using用法:
1) 引入命名空间
2) Using static指令:指定无需指定类型名称即可访问其静态成员的类型
3) 起别名
4) 将实例与代码绑定

1.10 正则表达式

一种匹配输入文本的模
模式由一个或多个字符、运算符和结构组成。
用于定义正则表达式的各种类别的字符、运算符和结构:
1) 字符转义
2) 字符类
3) 定位点
4) 分组结构
5) 限定符
6) 反向引用结构
7) 备用结构
8) 替换
9) 杂项结构

1.11 异常

Systemexception异常类:

  1. System.io.ioexception:处理i/o错误
  2. System.indexoutofrangeexception:处理当方法指向超出范围的数组索引时生成的异常
  3. System.arraytypemismatchexception:处理当数组类型不匹配时生成的错误
  4. System.nullrerenceexception:处理引用一个空对象时生成的异常
  5. System.dividebyzeroexception:被除数为零
  6. System.invalidcastexception:类型转换期间生成的异常
  7. System.outofmemoryexception:处理空闲内存不足生成的异常
  8. System.stackoverflowexception:处理栈溢出生成的异常

Applicationexception异常类:用户自定义异常

1.12 特性

特性是用于在运行时传递程序中各种元素(比如类、方法、结构、枚举、组件等)的行为信息的声明性标签。
特性用于添加元数据,如编译器指令、注释、描述、方法类信息。

创建并使用自定义特性的步骤:
1) 声明自定义特性
2) 构建自定义特性
3) 在目标程序元素上应用自定义特性
4) 通过反射访问特性

自定义特性:
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Constructor |
AttributeTargets.Field |
AttributeTargets.Method |
AttributeTargets.Property,
AllowMultiple = true)]

1.13 反射

反射指程序可以访问、检测和修改它本身状态或行为的一种能力。

反射的用途:
1) 允许在运行时查看特性信息
2) 允许审查集合的各种类型,以及实例化这些类型
3) 允许延迟绑定的方法和属性(property)
4) 允许在运行时创建新类型

反射的声明:
System.reflection.memberinfo info=typeof(class)

1.14 文件的输入与输出

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

StreamReader 和 StreamWriter 类用于文本文件的数据读写。这些类从抽象基类 Stream 继承,Stream 支持文件流的字节读写。

BinaryReader 和 BinaryWriter 类用于二进制文件的读写。

1.15 属性

属性(Property) 是类(class)、结构(structure)和接口(interface)的命名(named)成员。
类或结构中的成员变量或方法称为 域(Field)。
属性(Property)是域(Field)的扩展,且可使用相同的语法来访问。
它们使用访问器(accessors) 让私有域的值可被读写或操作。

属性(Property)的访问器(accessor)包含有助于获取(读取或计算)或设置(写入)属性的可执行语句。访问器(accessor)声明可包含一个 get 访问器、一个 set 访问器,或者同时包含二者。

1.16 委托

委托(Delegate) 是存有对某个方法的引用的一种引用类型变量。
引用可在运行时被改变。

委托声明格式:
delegate
一旦声明了委托类型,委托对象必须使用 new 关键字来创建,且与一个特定的方法有关。当创建委托时,传递到 new 语句的参数就像方法调用一样书写,但是不带有参数。

委托的多播:
委托对象可使用 “+” 运算符进行合并。一个合并委托调用它所合并的两个委托。只有相同类型的委托可被合并。“-” 运算符可用于从合并的委托中移除组件委托。

1.17 事件

事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。

C# 中使用事件机制实现线程间的通信。

事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。

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

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

事件的声明:
在类的内部声明事件,首先必须声明该事件的委托类型。

1.18 匿名方法

匿名方法(Anonymous methods) 提供了一种传递代码块作为委托参数的技术。匿名方法是没有名称只有主体的方法。

在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。

匿名方法是通过使用 delegate 关键字创建委托实例来声明的。

1.19 集合

1.19.1 动态数组(ArrayList)

动态数组(ArrayList)代表了可被单独索引的对象的有序集合。

1.19.2 哈希表(Hashtable)

采用键值对的方式存储,使用键值访问集合中的元素

1.19.3 排序列表(SortedList)

按照键排序的键值对,是数组和哈希表的组合。

1.19.4 堆栈(Stack)

后进先出的集合。
Pop():入栈
Push():出栈

1.19.5 队列(Queue)

先进先出的集合
Dequeue():出队
Enqueue():入队

1.19.6 点阵列(BitArray)

管理一个紧凑型的位值数组,使用布尔值表示。True为开启,false为关闭。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sunflower-ly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值