7855人加入学习
(10人评价)
C#编程-第四季-高级篇-宇宙最简单2022最新版

制作完成于2021年11月18日 使用VS2022

价格 免费

System.Reflection 

Type类

每一个类都有自己的Type对象

程序集的属性说明

通过遍历这个数组即可获得所有的内部成员-字段(因为权限问题无法获取私有)

获取内部属性

获取内部的方法(也会获取父类继承到的方法)

加载其他的程序集

[展开全文]

定义一个事件清单,需要的人自己去写,工具人下楼的时候拿着清单去执行相应的任务。

 

1 创建工具人类(干活的)

2 创建懒人类(派人干活的)

3 运行类中进行初始化,相应的人创建出来

4 工具人类里面定义一个委托

5 懒人将相应的任务委派给工具人下楼执行

也可以移除任务

委托,相当于懒人们订阅了工具人的消息,工具人发消息之后,触发了对应懒人的事件

 

问题1:+=不要写成=了,不然会覆盖掉之前所有的任务

问题2:工具人没有下楼,但消息发出了,导致出现没有下楼但对应的事件执行了

解决方法:让只有工具人可以消息发布,通过事件的方式解决

通过事件解决以上两个问题:

 

 

 

 

[展开全文]

Lambda表达式用于代替匿名方法

但是要注意:如果lambda表达式的函数体里面有多条语句,则不能省略花括号

 

可以访问外部变量

容易受到外部变量的影响,导致结果不可控,慎用

[展开全文]

匿名方法:不需要定义就可以使用的方法

匿名方法,lambda表达式,一般用于代码量很少的情况

[展开全文]

多播委托只能得到调用的最后一个方 法的结果

一般返回类型声明为void

Action action1 = Test1;
 action2+=Test2;
 action2-=Test1;

也可以把方法移除,也可以多添加几次(多执行几次)

逐个执行,如果中间异常,则中断

使用Func的方式,则只能返回最后一个返回值

 

返回一个通用的委托类的数组(里面有多少个委托)

调用这些方法(和上面的直接调用方式一样)

 

 

 

[展开全文]

1 原始的冒泡排序方法

bool swapped = true;
 do{
 swapped = false;
 for(int i =0;i<sortArray.Length -1;i++){
 if(sortArray[i]>sortArray[i+1]){
 int temp= sortArray[i];
 sortArray[i]=sortArray[i+1];
 sortArray[i+1]=temp;
   swapped = true;
  }
 }
 }while(swapped);

 

2 定义一个数组,将其进行排序并打印出来

但是职能对int类型进行排序

 

3 新建一个员工类,包括员工名字,员工工资

 

4 创造雇员数组(一系列雇员的信息)

目的是将这个数组进行排序

 

5 雇员类里加入薪水比较的方法,返回布尔

优点:比较灵活,当前是比较工资Salary,后面可以选择比较其他的数值(比如年龄、工龄等)

 

6 创建一个新的方法,用于比较任意类型,使用泛型T

 

7 将原有的冒泡排序算法的代码拷贝到新的排序算法内,并进行修改

 

8 将数组和比较方法传入新的排序方法并执行

 

9 验证最后是否排序好了

[展开全文]

Action:类型是void(返回值为空),可以0~多个参数

可以无返回值无参数

可以指定参数类型(一个参数)

指定多个参数类型

 

Action必须没有返回值,可以没有参数

Func  必须要有返回值,可以没有参数,可以0~16个参数

如果是带有参数的类型,则前面指定参数类型,最后一个必须指定返回值类型

 

 

 

 

 

[展开全文]

委托一个方法的引用,但其实本质还是一个变量

可以被数组存储,也可以被其他方法传递和引用

 

参数和返回值都一样,可以被同一个类型的委托调用,例如:

用同一个委托指向这两个方法

 

可以声明一个委托类型的数组

使用for循环可以调用多个方法

 

把方法当成参数传递过去

 

[展开全文]

委托是一个类型,用于赋值一个方法的引用

1 先定义

2 后使用

 

定义:delegate void 委托名字(参数); //没有方法体,类型是void

使用:委托名 实例名 = null

可以指向实例方法,也可以指向静态方法

 

同一类的静态方法可以直接访问

如果需要引用其他类的方法,加上对应路径即可

委托好之后,可以直接用这个变量代替使用这个方法了

 

委托调用的时候,不能为空,否则会抛出异常

为了避免异常,可以检测委托是否为空

 

也可以声明一个字符串类型的委托

创建一个委托用于字符串的转换

也可以采用new的方法来传递方法

 

 

 

[展开全文]

则一匹配 

|

 

重复单个字符,使用{2},只会作用于一个字符

如果需要匹配多个,则可以加一个括号,将多个字符打组

 

匹配括号

\(

 

第一位是2,则第二位为0~4,第三位是任意

第一位是2,则第二位是0~5,则第三位是0~1

第一位是0~1,则后面两位任意

 

[展开全文]

替换字符(但不会修改原字符)

 

限制指定长度的字符串

重复描述字符:

{5,12}  限制5~12个字符

{5} 只有5个字符

{5, } 至少有5个

zz

常用元字符

 

定位元字符(匹配开始,匹配结束)

 

IsMatch 判断是否符合,返回布尔值

Match 反馈一个对象

 

split拆分

 

[展开全文]

\d 数字

补集 \D 除了数字(反义字符)

\w 大小写字母0~9

补集 \W 除了以上这些字符

 

[abcdefg] 括号内字符都符合,括号外的字符都不符合

可以使用-符号,跨区指定

跨区的补集

 

 

 

 

[展开全文]

普通字符、特殊字符(元字符,规则语法)

《元字符文档》

 

引入命名空间

Regex.IsMatch  返回一个布尔值

 

字符串前增加一个@,可以让特殊字符失效

正则表达式,必须增加@,否则会被识别成其他特殊符号

\d 任意数字

\d* 0或者多个数字

\d\d\d\d\d 指定数量数字(5个)

^A  必须以某个字符(A)为开头

$A 必须以A为结尾

 

例如“验证QQ号

 

 

[展开全文]

数学算法,文本检索、匹配

1,检索:通过正则表达式,从字符串中获取我们想要的部分

2,匹配:判断给定的字符串是否符合正则表达式的过滤逻辑

 

检查书写规则:匹配邮箱、手机号、包含数字大小写等等

建议直接查找怎么写即可,不用特别记忆或研究

 

[展开全文]

StringBuilder类(位于System.Text命名空间下)

1、创建StringBuilder对象

StringBuilder sb = new StringBuilder("www.sikiedu.com");

string存储在静态存储区,修改会完全新建一个

stringBuilder存储在堆中,修改的对象是同一个(修改量大、频繁变更的时候使用)

 

StringBuilder sb = new StringBuilder(20);

创建一个初始容量‘如果不够的话会自动扩容(如果预先得知字符串长度,会比较节省性能)

sb.Capacity(获取字符串长度)

 

StringBuilder sb = new StringBuilder("www.sikiedu.com",100);

同上:指定初始值,指定初始容量

 

关于StringBuilder对象创建的时候的内存占用

2、Append()方法,给当前字符串追加一个字符

3、Insert()追加特定格式的字符串

4、Remove()从当前字符串中删除字符

5、Replace()在当前字符串中,用某个字符或者字符串全部替换另一个字符或者字符串

6、ToString()把当前stringBuilder中存储的字符串,提取成一个不可变的字符串

[展开全文]

10、Format()方法,格式化字符串 - 静态方法 https://www.cnblogs.com/net-sky/p/10250880.html

https://www.runoob.com/csharp/csharp-string.html

https://docs.microsoft.com/zh-cn/dotnet/api/system.string.format? view=net-5.0

对应格式可以使用多次(方便复用)

让字符串以相应格式输出

日期格式输出

也可以使用ToString来转换(使用率高)

用于表示时间的:

DateTime

DateOnly

TimeOnly

 

11、IndexOf()方法,取得字符串第一次出现某个给定字符串或者字符的位置

 

12、IndexOfAny()方法,找到一个字符串里面任意一个字符(模糊匹配)

 

13、Insert()把一个字符串实例插入到另一个字符串实例的制定索引处

 

14、Join()合并字符串数组,创建一个新字符串

 

 

[展开全文]

关于字符串的更多方法

1、CompareTo()方法,比较字符串的内容

2、Replace()用另一个字符或者字符串替换字符串中给定的字符或者字符串

(注意,更换之后,原来处于静态存储区的字符串不变,而是新创建了一个,将变量的引用换成新的)

 

3、Split()在出现给定字符的地方,把字符串拆分称一个字符串数组

打印出来的不是分割出来的数组内容

而是一个类型

用一个数组容纳分割之后的内容,使用遍历的方式打印出来

 

4、SubString()在字符串中检索给定位置的子字符串(检索并截取)

5、ToLower()把字符串转换成小写形式

6、ToUpper()把字符串转换成大写形式 7、Trim()删除首尾的空白

7、Trim()删除首尾的空白(一般用于web开发中去掉账号中的无效空格)

 

以下是静态方法

8、Concat()方法,合并字符串 - 静态方法

9、CopyTo()方法,把字符串中指定的字符复制到一个数组中

10、Format()方法,格式化字符串 - 静态方法 https://www.cnblogs.com/net-sky/p/10250880.html https://www.runoob.com/csharp/csharp-string.html https://docs.microsoft.com/zh-cn/dotnet/api/system.string.format? view=net-5.0

11、IndexOf()方法,取得字符串第一次出现某个给定字符串或者字符的位置

12、IndexOfAny()方法,

13、Insert()把一个字符串实例插入到另一个字符串实例的制定索引处

14、Join()合并字符串数组,创建一个新字符串

 

 

 

 

 

 

[展开全文]

System.String类

1、创建字符串 string s = "www.sikiedu.com";

2、获取字符串长度 s.Length(属性)

3、比较字符串是否一样 s=="www.sikiedu.com"

4、字符串连接 s="http://"+s;

5、使用类似索引器的语法来取得字符串中的某个字符 stringName[index] s[0] s[3

 

字符串是引用类型

字符串是静态的(放置在精

 

关于string字符串:string创建的字符串实际上是一个不可变的数据类型,一旦对字符 串对象进行了初始化,该字符串就不能改变内容了,上面的示例中实际上是创建了一个新的 字符串,把旧字符串的内容复制到新字符串中。然后把新字符串的引用赋值为字符串的对 象。(重复修改给定的字符串,效率会很低

 

[展开全文]

internal 命名空间内部

如何使用其他命名空间的类?

命名空间可以嵌套(类似文件夹)

常用的命名空间

命名空间部分代码引用自:https://www.runoob.com/csharp/csharp-namespace.html C#常用命名空间 https://www.cnblogs.com/makesense/p/4500955.html

 

[展开全文]

授课教师

问问题加入A计划,有专门负责答疑的老师哦!!!

课程特色

下载资料(1)
视频(64)