自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(164)
  • 收藏
  • 关注

原创 c#笔记-目录

这些文章内容基于.Net8预览版的API,和c#12预览版的语法。不保证和正式版一致。Unity最新支持c#9。大多数教育机构只支持c#7.3。新手不要触及底层。c#,java这些高级语言,unity这种引擎,本来就是为了降低上手门槛而创造的。为了让你不需要知道CPU指令,不需要学习高等数学。在新手期触及底层是本末倒置的。学习算法是有用的,但不能帮助你学习c#语言。因为算法题是要求用任何语言都能实现的。所以不会利用c#特有的语法。

2022-01-03 12:12:22 2162 4

原创 c#扩展包-Stateless

Ignore方法可以忽略这个触发器,什么也不发生。那如果声明忽略而调用这个转换会怎么样呢?会报一个错,表示这个转换没有注册。你可以对状态机(不是配置)注册一个委托,来表示有未注册的转换时什么也不做。

2023-09-20 10:44:11 588

原创 c#中字段和属性的区别,委托和事件的区别

很多新人发现在类中定义变量时,有些人会在后面写上get,set。这种写法定义出来的变量,在使用的时候看起来和普通的变量没有区别。所以不理解这样做有什么意义。首先,我们去掉Age2。只关注age1.用你的IDE对他点右键,快速重构中会出现两个选项,封装字段并使用字段/并使用属性。无论选择哪一种,类中都会出现一个Age1,并且他的内容是相同的。然后,根据你选择的使用,下面对这个变量的调用会替换为。得出结论,没有get,set的东西是字段,带有get,set的东西叫做属性。然后,对。

2023-09-10 17:52:38 618

原创 c#示例-xml序列化和xml树

由于指针和引用类型的存在,在运行中的程序中,数据不一定是整块的。可能东一块西一块散落在内存的各个地方。序列,是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。经过这样处理后的数据就可以方便的进行传输和储存了。

2023-07-14 13:25:06 1780

原创 c#示例-json序列化和json树

由于指针和引用类型的存在,在运行中的程序中,数据不一定是整块的。可能东一块西一块散落在内存的各个地方。序列,是指连续且有序的一个整体。序列化就是把数据变为连续有序整体的过程。经过这样处理后的数据就可以方便的进行传输和储存了。

2023-07-13 19:50:41 684

原创 c#笔记-多线程

异步和并行都是并发的一种手段。并发是指多个任务的执行有重叠的时间,即在一个任务没有完全执行的时候就执行另一个任务。异步是一个任务中可以暂停去做别的事情,在纯等待任务中,可以利用这个空余时间做别的事情。否则仅能够提供程序的响应能力,例如暂停和取消这种必须立刻响应的操作。并行是利用CPU的多个逻辑处理器同时执行,是真正能提高程序执行效率的。多线程是实现并行的一种手段。在一个程序进程里的多个执行单元,不同的线程可以共享这个进程下的数据。当然直接开好几个程序,也是一种并行手段。

2023-05-19 19:27:20 623 1

原创 c#笔记-异步

异步的意思是一会执行这个一会执行那个。比较术语一点的说法就是,当一个方法没有被完全执行时,就交出控制权,让其他方法执行。和异步相反的叫同步,这就是说等待方法完全执行完毕。异步的意义就是“不等待完全执行”,这样做就可以对一些东西立刻发出响应。例如一个压缩或解压操作。一般的软件上面都会有一个暂停,继续,取消按钮。这三个命令是必须立刻执行的,不能等待压缩完全执行完毕后才执行。所以这里就是一个异步操作,一会执行压缩任务,一会看看暂停有没有被点击。

2023-05-19 11:46:38 649

原创 c#笔记-迭代器

foreach中的临时变量是只读的。因为的Current属性只有get访问器。但如果自定义一个迭代器,返回引用变量,那么foreach中的迭代变量可以进行赋值。和可迭代类型类似,迭代器类型也只要求具有一些可以访问的成员,就是一个迭代器。自定义迭代器只要求包含Current属性和MoveNext方法。Current属性的类型就是foreach中迭代变量自动识别的类型。//一个用来被遍历的东西 public readonly int [ ] Arr;

2023-05-17 17:54:05 974

原创 c#笔记-委托

预置的Action和Func委托类型以及他们的各泛型版本,在大多数情况下都能满足我们使用。但一些情况下我们仍然必须创建自己的委托类型,例如参数中具有refoutin的时候。委托是类型,是和类,结构,接口同级别的东西,所以委托可以直接定义在命名空间下。委托类型使用delegate关键字声明,后面跟随一个方法签名,不能带有实现。

2023-05-17 11:43:33 366

原创 c#笔记-泛型

假设我们要编写一个方法,它可以获取任意类型数组中的最大值,并返回该值。这个方法可以实现我们的需求,但是它只能处理整数类型。这样做显然很冗余,而且每增加一种数据类型,就需要增加一个新的方法。这样不仅增加了代码量,也增加了出错和维护的难度。

2023-05-12 18:31:43 908

原创 c#笔记-异常

如果我们想要创建一个自己的异常类,我们需要继承或间接继承Exception类,一个无参构造器,调用基类的无参构造器。一个带有字符串参数的构造器,调用基类的带有字符串参数的构造器,并将字符串作为异常消息传递给基类。一个带有字符串参数和Exception参数的构造器,调用基类的带有字符串参数和Exception参数的构造器,并将字符串作为异常消息,Exception作为内部异常传递给基类。一个带有参数和参数的构造器,调用基类的带有参数和参数的构造器,并将序列化信息和流上下文传递给基类。

2023-05-11 17:19:45 449

原创 c#笔记-特性

特性可以通过反射获取。而你的编译器一直在观察你的代码,可以直接和一些特性交互。以下是一些预定义的特性,编译器会对他们做出响应。特性是一种继承自Attribute类的类,它可以具有类的所有功能,但是通常用于给其他代码元素(如类、方法、属性等)添加一些额外的信息或行为。

2023-05-11 14:36:14 431

原创 c#笔记-对象初始化器

对象初始化器是在构造器后使用的初始值赋值补充语法。它可以在构造器后使用花括号,依次指定成员名和赋值表达式,以逗号分隔。对象初始化器不能为只读字段赋值,但可以对具有init访问器的属性进行赋值。一个实例构造出来的时候运作顺序是所以对于节省性能是没有帮助的,只能让他更简洁醒目,一个合并为单条语句。例如如果构造的实例是要参与表达式运算的。

2023-05-11 12:08:47 908

原创 c#笔记-枚举

枚举是一种值类型,用于定义一组具有特定名称和数值的常量。枚举可以用于表示有限的可选项,例如中国的56个民族,或者扑克牌的花色。

2023-05-10 20:47:12 748

原创 c#笔记-记录

并非所有类型都需要有一定的行为。有很多的数据单纯的只需要存储和展示。类或结构可以使用record进行修饰,将可以使用主构造器,并自动合成一些成员。

2023-05-10 11:54:15 512

原创 c#笔记-结构

结构是值类型。值类型不能继承其他类型,也不能被其他类型继承。所以它的方法都是确定的,没有虚方法需要在运行时进行动态绑定。值类型没有对象头,方法调用由编译器直接确定。但是,如果使用引用类型变量(如接口或object)来存储一个值类型,或者调用了从object类继承的方法(如ToString),那么会发生。这时,这个值类型会在堆上创建一个复制,并为它添加对象头。此时它的行为和引用类型一样。如果把一个引用类型的值强制转换为值类型,就会去掉它的对象头,并把内容复制到目标位置,这称为。

2023-05-10 07:50:15 709

原创 c#笔记-接口

>由于接口可以多继承,对继承链没有限制,所以一个接口可能出现在任何一个类上。>所以一个接口的实现可能各种各样。但使用接口意味着你**不关心是谁,用什么方式**来完成。>\>以官方库为例,排序接口。这个接口只有一个作用:>给你一个值,你告诉我这个值应该排在你前面还是后面。>\>任何类型都有权实现,也有权不实现排序。而对于实现了排序接口的类,>他们可能会根据自身的情况,有各种各样的实现方式。但你并不关心。

2023-05-09 19:14:45 488

原创 c#笔记-继承

声明类时,可以指定一个类型作为基类。NameName这个类型将获得基类的所有。除了构造器和终结器。静态类由于不允许存在任何实例,所以无法参与继承和被继承。妙蛙草继承了妙蛙种子。此时我们称妙蛙草是从妙蛙种子派生出来的。妙蛙种子是妙蛙草的基类,妙蛙草是妙蛙种子的派生类。继承具有传递性。所以妙蛙花也是从妙蛙种子派生的。

2023-05-09 14:13:10 711

原创 c#笔记-定义类

类型转换使用implicit(隐式),explicit(显示)之一,加上operator指定。参数和返回值其中有一个是自身的类型。转换没有传递性,但每一个隐式转换都可以以显示转换调用。有必要的话可能需要使用这种方式转换(生物能)(化学能)(热能)电能。类同样不能重名。为了区分类,可以使用命名空间隔离他们。命名空间的作用类似于文件夹。不同文件夹下的文件是可以同名的。namespace Plain //郊外 {namespace Castle //古堡 {

2023-05-08 17:24:52 1200

原创 c#笔记-模式匹配

模式匹配可以判断一个值的类型和内容。可以判断嵌套的属性,但只能和常量进行比较。模式匹配使用is表达式,或是在switch选择,和switch表达式的分支块中启用。

2023-05-07 12:16:20 803

原创 c#笔记-方法

当调用方法时,就会执行方法体内的代码。在多个地方需要使用同一组复杂代码时,使用方法打包,会减少代码量。相较于直接复制这些代码,打包成方法更方便后续的修改。只需要修改方法体内部的代码,所有调用方法的地方执行的代码都会被修改。

2023-05-06 14:17:29 733

原创 c#笔记-数组

数组是把多个同类型变量打包的类型。所以声明一个数组,相当于让c#替你同时声明多个变量。如果你一开始就能决定好所有元素的数量和值,那么可以使用字面量进行声明。字面量必须指定变量类型,不能使用var进行判断。尽管这称作字面量,但他依然是通过构造产生的。因此不能作为常量值。

2023-05-05 07:24:51 462

原创 c#笔记-运算符

在数字前面,或数字类型的变量前面使用正负号,可以表示这个数值取自己,或是取相反数。

2023-05-04 04:48:08 1354

原创 c#笔记-流程控制语句

为了展示流程控制的作用,需要每次执行程序时都使用不一样的值。无论是每次都修改源码,还是从控制台读取输入都太麻烦了。所以使用随机数进行测试。随机数的使用方式如下,使用随机数类,获取一个默认的随机数工具,然后用这个工具生成随机数。变量储存值而不储存操作。这里的作用是把一个随机数的值储存到一个变量中。除非修改这个变量的值,否则他会一直保持这个值。并不会每次访问都会发生变化。一些特殊情况不详细说明。例如,随机数不会是负数,所以这个上限不能是负数。但如果这里填0,那么不会取到上限值。

2023-05-03 15:20:46 1544

原创 c#笔记-内置类型

一些类型之间写了类型转换的方式。例如从char到int。他们本来没有兼容,但是源码写了从char到int的转换方式,所以可以转换。而char没有写到string的转换,所以即便他们很像也不能把char值赋值给string变量。//会得到这个字符的编码//报错字符的储存是列一张表。规定数字1对应字符a,数字2对应字符b这样子。这张表就叫字符集。把char值赋值给int变量会得到他的编码。char类型是utf-16编码储存,也就是说是一个无符号16比特数据,跟ushort一样。

2023-05-02 08:33:18 867

原创 c#笔记-变量

使用var + 标识符,并立刻赋值,可以声明一个变量。引号包围表示他是一串文字。表示执行Console类的WriteLine方法,是程序的一部分表示的是一串文字。里面的东西不会执行。

2023-05-01 07:49:36 727

原创 c#笔记-语法规则

c#语法规则

2023-05-01 02:45:02 1464

原创 c#笔记-创建一个项目

在你安装完成Visual Studio后打开它,你会的到一个启动窗口点击创建新项目,选择右上角c#的的控制台应用。目标框架选择NET8.0。

2023-05-01 02:40:54 2297

原创 c#笔记-下载编辑器

IDE(Integrated Development Environment),集成开发环境。包含了开发用的大部分功能,并且可以一键配置,一键编译,一键运行。适合新手使用。但缺点是卡,很占资源。Visual Studio是一种编写c#的有名的IDE。使用必应搜索引擎搜索VS,第一条就是他的官网。在选择社区版(Community)进行下载。然后你应该会得到一个不足10M的安装程序。打开它,你应该会经过10分钟到半小时左右的环境安装。接着,你应该会见到类似如下的界面。

2023-04-30 23:12:04 1366

原创 c#数据结构-有序列表和有序字典

有序列表和有序字典都是是一个键值对容器,像字典一样。从习惯和描述推测,有序列表大概长这样而有序字典长这样所以如果更多的倾向于只读,那么有序列表会更合适。

2023-02-13 03:26:08 627

原创 c#数据结构-列表

数组可以管理大量数组,但缺点是无法更变容量。创建小了不够用,创建大了浪费空间。无法预测需要多少大小的时候,可能范围越大,就会浪费越多的空间。所以,你可能会想要一种可以扩容的东西,代替数组。列表就能做到这件事。

2023-02-12 07:04:56 664

原创 c#数据结构-多维数组

多维数组使用多个参数的索引器进行访问。且每个参数的范围不会随着其他参数改变。可以很好的作为图像像素这种方方正正的东西的容器。

2023-02-12 06:12:16 870

原创 c#反射-构建泛型和数组

在反射中,反射获取的类型可以是么有填入类型参数的类型。其中和类型参数有关的成员无法获取和执行。以下是示例类。

2023-02-12 02:44:40 530

原创 c#反射-执行方法和创建实例

以下是示例类,有两个重载方法和一个构造器。

2023-02-12 01:11:29 507

原创 c#反射-获取属性,索引器,事件的访问器

访问器是一个方法。在获取到访问器后,查看元数据,和调用方法的操作和反射获取的普通方法是一样的。以下是示例类。

2023-02-12 00:51:11 495

原创 c#反射-获取属性和字段的值

示例类具有一个私有实例字段,一个实例属性,一个实例字段,一个静态私有属性。

2023-02-12 00:31:42 1884 1

原创 c#反射-查看成员元数据

参数和返回值需要通过ParameterInfo类获取特性。不同的是方法的返回值,参数,和本身三个位置都可以放特性。各成员类的检查特性方法和Type的差不多。

2023-02-11 05:51:55 134

原创 c#反射-从Type搜寻成员

除了Type可以描述类型的信息以外。还有字段,属性,方法,构造器,事件等类型,用于描述各自的成员。以下是示例类。

2023-02-11 05:08:04 151

原创 c#反射-查看Type的元数据

元数据是描述数据的数据。例如抽象,密封这些类的修饰关键字,都是在描述这个类。在使用程序集获取所有类型后,可以再检验元数据筛选出想要的Type,再用Type构建值。

2023-02-11 04:32:55 511

原创 c#反射-获取Type

使用Type的静态方法GetType,可以获取类型。参数是这个类型的(带命名空间,带声明类,带泛型)这种做法通常是从文件名,构建这种类型。(源文件通常只声明一个类,而且类名和文件名同名。并且通常命名空间和文件夹层级也一样)

2023-02-11 04:08:46 1699

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除