![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C#系列
文章平均质量分 53
Nicole Potter
专注于Unity3D游戏开发
展开
-
C#系列之值类型与引用类型2
C#系列专栏对于C#的知识点从入门到进阶都有所讲解,有些数据结构的知识点选了一些较为重要的,较常见的问题讲解了一些篇幅,有一些排序类的问题(你可能在现阶段使用的比较少,但是当你准备面试时却不可少的内容,面试可以会出的相关排序问题)我们将额外制定C#系列之排序问题相关的专栏额外讲解,因为那些不常用的知识点最容易忘记,你可以选择面试前再去学习,或者你想要对于C#了解更加通透,你可以去订阅相关专栏了解更多内容。数组本身是引用类型,值类型数组,堆中房间存具体内容,引用类型数组,堆中房间存地址。原创 2023-07-28 15:43:05 · 83 阅读 · 1 评论 -
C#系列之特殊语法
注意:var不能作为类的成员,只能用于临时变量声明时,也就是一般写在函数语句块中,var必须初始化。(可变类型的变量,一般用于不确定类型时使用,但是一旦赋值,类型就确定下来了,不适合协同开发)运算符帮助我们进行了intV.Value的操作,所以不需要再次使用点的操作,简写。括号()省略不写,当无参构造被有参构造顶替时里面必须传参,否则会报错。var是一种特殊的变量类型,它可以用来表示任意类型的变量。如果左边值为null就返回右边值,否则返回左边值。只要是可以为null的类型都可以用。也可以指定一个默认值。原创 2023-07-28 12:45:37 · 114 阅读 · 0 评论 -
C#系列之迭代器
迭代器模式提供一个方法顺序访问一个聚合对象中的各个元素,而不暴露其内部的标识。在表现效果上看,是可以在容器对象(例如链表或数组)上遍历访问的接口,设计人员无需关心容器对象的内存分配的实现细节,可以用foreach遍历的类,都是实现了迭代器的。yield return是C#提供给我们的语法糖,所谓语法糖也称为糖衣语法。让想要通过foreach遍历的自定义类实现接口中的方法GetEnumerator即可。迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式。原创 2023-07-28 11:24:10 · 391 阅读 · 0 评论 -
C#系列之特性
继承特性基类Attribute。原创 2023-07-27 19:28:31 · 116 阅读 · 0 评论 -
C#系列之反射关键类Assembly和Activator知识点
主要用来加载其它程序集,加载后才能用Type来使用其它程序集中的信息。Assembly assembly=Assembly.LoadFrom("包含程序集清单的文件的名称或路径");Assembly assembly3=Assembly.LoadFile("要加载的文件的完全限定路径");为了之后学习Unity引擎的基本工作原理做铺垫,Unity引擎的基本工作机制就是建立在反射的基础上。包含程序集清单的文件的名称或路径-加//或者@都可以,里面不能直接使用/,不需要后缀。//得到对象中的方法,通过反射。原创 2023-07-27 16:27:16 · 327 阅读 · 0 评论 -
C#系列之反射概念和关键类Type知识点
程序集是由编译器编译得到的,供进一步编译执行的那个中间产物。在WINDOWS系统中,它一般表现为后缀为-dll(库文件)。简单的说,程序集就是我们写的一个代码集合,我们现在写的所有代码最终都会被编译器翻译为一个程序集供别人使用,比如代码库文件(dll)或者一个可执行文件(exe)原创 2023-07-26 20:18:18 · 182 阅读 · 0 评论 -
C#系列之预处理器命令
编译器是一种翻译程序,它用于将源语言程序翻译为目标语言程序。源语言程序:某种程序设计语言写成的,比如:C#,C,C++Java等语言写的程序。目标语言程序:二进制数表示的伪机器代码写的程序。预处理器指令指导编译器,在实际编译开始之前的信息进行预处理。预处理器指令都是以#开始。预处理器指令不是语句,所以它们不以分号;结束。目前,我们经常使用到的折叠代码块,就是预处理器指令。原创 2023-07-26 16:59:27 · 53 阅读 · 0 评论 -
C#系列之多线程
了解线程前先了解进程。进程是计算机中的程序关于某数据集合上的一次运行活动。是系统进行资源分配和调度的基本单位,是操作系统结构的基础。打开一个应用程序就是在操作系统上开启了一个进程,进程之间可以相互独立运行,互不干扰。进程之间也可以相互访问,操作。电脑操作系统:手机操作系统:2.什么是线程?线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,我们目前写的程序都在主线程中。原创 2023-07-25 18:46:56 · 99 阅读 · 0 评论 -
C#系列之协变逆变
和谐的变化,自然的变化。因为里氏替换原则父类可以装子类,所以子类变父类,比如string变成object是和谐的。逆常规的变化,不正常的变化。逆常规的变化,不正常的变化。因为里氏替换原则父类可以装子类,但是子类不能装父类。所以父类变子类,比如object变string是不和谐的。协变和逆变是用来修饰泛型的。协变:out逆变:in用于在泛型中修饰泛型字母的,只有泛型接口和泛型委托能使用。逆变:in协变: out用来修饰泛型替代符的,只能修饰接口和委托中的泛型。1。原创 2023-07-25 15:41:04 · 56 阅读 · 0 评论 -
C#系列之List排序
自定义一个类Item,在其中的类方法中写上相应的逻辑,通过改变逻辑来改变升降序。//排序方法自定义类之所以通过改变逻辑来改变升降序,是因为这里的Sort方法是靠类内部的逻辑实现的,此处我省略了没完整写出代码。而刚刚讲述的Sort系统內自带了逻辑,并且有几种重载。这里不能直接使用Sort必须自己定义否则就会报错。大家可以自己通过实验证实。原创 2023-07-24 21:23:52 · 388 阅读 · 0 评论 -
C#系列之lambda表达式
可以将lambda表达式理解为匿名函数的简写,它除了写法不同外,使用上和匿名函数一模一样,都是和委托或者事件配合使用的。原创 2023-07-24 17:29:44 · 84 阅读 · 0 评论 -
C#系列之匿名函数
匿名函数就是没有名字的函数,匿名函数的使用主要是配合委托和事件进行使用。脱离委托和事件是不会使用匿名函数的。原创 2023-07-24 15:03:22 · 1514 阅读 · 0 评论 -
C#系列之事件
事件是基于委托的存在,是委托的安全包囊,让委托的使用更具有安全性,是一种特殊的变量类型。事件是作为成员变量存在于类中,委托怎么用,事件就怎么用。访问修饰符 event 委托类型 事件名;注意:它只能作为成员存在于类和接口以及结构体中。事件相当于对委托进行了一次封装,让其更安全。防止外部随意置空委托,防止外部随意调用委托。:不能在类外部赋值,不能在类外部使用。原创 2023-07-24 14:09:07 · 62 阅读 · 0 评论 -
C#系列之委托
访问修饰符默认不写为public,在其他命名空间也可以使用。private其他命名空间就不能使用了。一般使用public.声明了一个可以用来存储无参无返回值函数的容易,这里只声明规则没有使用。//不能重名,不然就会报错。委托规则的声明,在同一语句块中不能重名。表示用来装载或传递,返回值为int,有一个int参数的函数的委托容器规则。委托变量是函数的容器。//此时只是装在容器里,没有调用函数。//第一种调用方法f.Invoke();//函数名,不能打括号,否则就是调用。原创 2023-07-23 21:56:41 · 106 阅读 · 1 评论 -
C#系列之泛型栈和队列
命名空间:using.System.Collections.Generic;引用:using.System.Collections.Generic;数组{一维,二维,交错}[ ] [ , ] [ ][ ]Dictionary 字典 泛型哈希表。使用上和之前的Stack,Queue一样。LinkedList 双向链表。Stack,栈 先进后出。Queue,队列 先进先出。ArrayList,数据列表。List 列表 泛型队列。Queue 泛型队列。结构体 struct。原创 2023-07-23 20:35:22 · 93 阅读 · 0 评论 -
C#系列之LinkedList
LinkedList是一个C#为我们封装好的类,它的本质是可变类型的泛型双向链表。无法直接通过下标获取中间元素,只有遍历查找特定位置的元素。在某一个节点之后添加一个节点,要指定节点先得到一个节点。在某一个节点之前添加一个节点,要指定节点先得到一个节点。先得到再修改,得到节点,再改变其中的值。无法通过位置直接移除。原创 2023-07-23 12:28:11 · 1468 阅读 · 0 评论 -
C#系列之顺序存储和链式存储
数组、ArrayList、Stack、Queue、List——顺序存储,只是数组、Stack、Queue的组织规则不同。不要把数据结构想的太复杂,它只是定义的存储数据和表示数据之间关系的规则而已。顺序存储使用上优于链式存储(数组可以直接通过下标得到元素,链式需要遍历)。顺序存储使用上优于链式存储(数组可以直接通过下标得到元素,链式需要遍历)。线性表是一种数据结构,是由n个具有相同特性的数据元素的有限序列。常用的数据结构:数组,栈,队列,链表,树,图,堆,散列表。单向链表、双向链表、循环链表——链式存储。原创 2023-07-23 11:46:32 · 153 阅读 · 0 评论 -
C#系列之Dictionary
可以将Dictionary理解为拥有泛型的Hashtable,它也是基于键的哈希代码组织起来的键/值对。键/值对类型从Hashtable的object变为了可以自己制定的泛型。值是可以一致的,但是键不可以。原创 2023-07-22 15:35:32 · 241 阅读 · 0 评论 -
C#系列之常用泛型数据结构类List
List是一个C#为我们封装好的类,它的本质是一个可变类型的泛型数组。List类型帮助我们实现了很多方法。比如泛型数组的增删查改。原创 2023-07-22 15:01:46 · 119 阅读 · 0 评论 -
C#系列之泛型约束
让泛型的类有一定的限制。关键字:where。原创 2023-07-17 12:30:50 · 1123 阅读 · 0 评论 -
C#系列之Hashtable
Hashtable又称散列表,是基于键的哈希代码组织起来的键、值对。需要引用命名空间System.Collections。它的主要作用是提高数据查询的效率。或者叫哈希表,通过Key编码存储。使用键来访问集合中的元素。原创 2023-07-15 16:49:02 · 157 阅读 · 0 评论 -
C#系列之Queue
Queue是C#为我们封装好的一个类,它的本质也是object数组,只是封装了特殊的存储规则。Queue是队列存储容器,队列是一种先进先出的数据结构。需要引用命名空间System.Collections。先存取的数据先获取,后存入的数据后获取。原创 2023-07-15 15:21:11 · 164 阅读 · 0 评论 -
C#系列之Stack
它的本质也是object[ ]数组,只是封装了特殊的存储规则。//用foreach遍历,遍历出来的顺序也是从栈顶到栈底。Stack是栈存储的容器,栈是一种先进后出的数据结构。当将值类型对象取出来转换使用时,就存在拆箱。先存入的数据后获取,后存入的数据先获取。由于用万物之父来存储数据,存在装箱拆箱。当往其中进行值类型存储时就是在装箱。栈是一个C#为我们封装好的类。原创 2023-07-14 23:34:46 · 272 阅读 · 0 评论 -
C#系列之ArrayList
C#最核心的部分已经学习结束了,接下来我们将学习一些进阶知识点。学习完这些能够让你的程序更加完美。原创 2023-07-14 22:15:26 · 1887 阅读 · 0 评论 -
C#系列之抽象类和接口的区别
接口interface自定义类型,是行为的抽象,不包含成员变量,仅包含方法,属性,索引器,事件,成员都不能实现,建议不写访问修饰符,默认public.都可以包含方法声明,子类必须实现未实现的方法,都遵循里氏替换原则。抽象类中可以声明成员方法,虚方法,抽象方法,静态方法。抽象类不能实例化,抽象方法只能在抽象类中声明,是个纯虚方法,必须在子类中实现。抽象方法可以使用访问修饰符,接口中建议不写,默认public.抽象类中可以有构造函数,接口不能。抽象类中可以有成员变量,接口不能。对象使用抽象类,行为使用接口。原创 2023-07-14 12:52:44 · 121 阅读 · 0 评论 -
C#系列之结构体和类的区别
结构体和类最大的区别在于存储空间上,结构体是值,类是引用。他们的存储位置一个在栈上,一个在堆上。由于结构体不具备继承特性,所以它不能够使用protected保护访问修饰符。原创 2023-07-14 11:57:37 · 185 阅读 · 0 评论 -
C#系列之StringBuilder
string是特殊的引用,每次重新赋值或者拼接时会分配新的内存空间。如果一个字符串经常改变会非常浪费空间。修改字符串而不创建新的对象,需要频繁修改和拼接字符串可以使用它,可以提升性能。StringBuilder存在一个容量问题,每次往里面添加时,会自动扩容。C#提供的一个用于处理字符串的公共类。使用前,需要引用命名空间。原创 2023-07-13 22:20:35 · 543 阅读 · 0 评论 -
C#系列之string
(由于书写代码无法给大家提供运行结果和报错信息,所以我会采用一些实验截图的形式更好的展现实验结果)注意:空格键也算一个字符,从0开始数。字符串本质是char数组。5.移除指定位置后的字符。原创 2023-07-13 19:55:26 · 247 阅读 · 0 评论 -
C#系列之万物之父中的方法
普通方法GetType,该方法的主要作用就是获取对象运行时的类型Type,通过Type结合发射相关知识点可以做很多关于对象的操作。最终的判断权交给左侧对象的Equals方法,不论值类型还是引用类型都是按照左侧对象Equals方法的规则来进行比较。浅拷贝克隆的不干净,引用类型与克隆体指向一个地址,所以,当改变克隆体值时,值类型不改变但是引用类型会改变。左侧方法指的是虚方法,微软默认替我们引用了虚方法所以Equals可以进行比较。该方法用于获取对象的浅拷贝对象,口语化的意思就是会返回一个新对象。原创 2023-07-13 15:57:14 · 148 阅读 · 0 评论 -
C#系列之命名空间
作用:就像一个工具包,类就像一件又一件的工具,都是在声明的命名空间中的。原来程序之间可以相互调用,加上internal后只能在本程序集中调用。前提是在不同的命名空间內,在同一命名空间必须标明出处,否则报错。命名空间之中的类默认为internal:访问权限于当前的程序集。使用帕斯卡命名法,命名空间可以分开写。命名空间是用来组织和重写代码的。namespace 命名空间。但是不允许出现同名的类!包裹的必须层层引用才行。原创 2023-07-12 16:13:23 · 203 阅读 · 0 评论 -
C#系列之密封函数
注意:密封方法一定是和override一起出现!作用:让虚方法或者抽象方法之后不能再重写。用密封关键字sealed修饰的重写函数。特点:和override 一起出现。原创 2023-07-12 14:59:44 · 75 阅读 · 0 评论 -
C#系列之接口
接口声明的规范:不包含成员变量,只包含方法,属性,索引器,事件。接口不能继承类,但是可以继承另一个接口。特点:它和类的声明类似,接口是用来继承的,接口不能实例化,但是可以作为容器存储对象。接口的使用规范:类可以继承多个接口,类继承接口后,必须实现接口中所有成员。接口继承接口时,不需要实现。待类继承接口后,类去实现所有内容。继承了接口后,必须实现其中的内容,并且必须是public.情况:当一个类继承两个接口,但是接口中存在同名方法时。注意:显示实现接口时,不能写访问修饰符。类可以继承1个类,n个接口。原创 2023-07-11 21:34:12 · 141 阅读 · 0 评论 -
C#系列之抽象类和抽象方法
父类中的行为不太需要被实现的,只希望子类去定义规则可以选择抽象类,然后使用其中的抽象方法来定义规则。抽象方法就是abstract修饰的方法,与虚函数相同,必须被访问,不能是private,抽象方法没有方法体,无大括号{}!与虚方法不同,必须实现否则报错而虚方法可以选择写逻辑,抽象方法不行。抽象方法必须实现,虚方法可以在任何类中声明,而抽象方法不行。子类的子类就不必要选择抽象方法了,当然也可以选择抽象实现,抽象方法可以无限被子类重写。特点:不能被实例化的类,可以包含抽象方法,继承抽象类必须重写抽象方法。原创 2023-07-10 21:21:44 · 335 阅读 · 0 评论 -
C#系列之多态
可以自己选择是否保留父类的特征,public 和override顺序并不重要,只有Const必须在访问修饰符后面。多态按字面的意思就是多种状态,让继承同一父类的子类们,在执行相同方法时有不同的表现(状态)base是否使用看实际需求,保留父类行为。虚函数一定是与函数重写配对使用的。虚函数,重写,父类base(调用父类构造函数),抽象函数,接口。主要目的:同一父类的对象,执行相同行为(方法)有不同的表现。解决的问题:让同一个对象有唯一行为的特征。目前我们学习过的多态——函数重载。原创 2023-07-10 17:04:53 · 231 阅读 · 0 评论 -
C#系列之密封类
面向对象程序的设计中,密封类的主要作用就是不允许最底层的子类被继承。可以保证程序的规范性,安全性。目前对于大家来说,可能用处不大。以后制作复杂系统或者程序框架时,便能体会到密封的作用。作用:让类无法得到继承。密封关键字修饰的类。原创 2023-07-10 15:46:38 · 541 阅读 · 0 评论 -
C#系列之万物之父与装箱拆箱
作用:可以利用里氏替换原则,用object容器装所有对象。可以用来表示不确定类型,作为函数参数类型。发生条件:用object存值类型(装箱);概念:object是所有类型的基类,它是一个类(引用类型);拆箱:把引用类型存储的值类型取出来,堆内存会迁移到栈内存中。装箱:把值类型用引用类型存储,栈内存会迁移到堆内存中。传值和引用类型都可以,尽量避免使用,有内存消耗。好处:不确定类型时,可以方便参数的存储和传递。可以装任意类型,一种括号强转,一种as转化。把object里面存的值拿出来。用object存值类型。原创 2023-07-10 14:30:31 · 80 阅读 · 0 评论 -
C#系列之继承中的构造函数
注意:父类的构造函数很重要,子类可以通过base关键字代表父类,调用父类构造。子类实例化时,默认自动调用的是父类无参构造,所以如果父类无参构造被顶掉会报错。特点:当声明一个子类对象时,先执行父类的构造函数,再执行子类的构造函数。注意:有参构造会顶掉默认的无参构造。如果想保留无参构造函数需重载出来。父类的父类的构造函数——>父类的构造函数——>子类构造函数。这里this用于访问本类的成员。先执行父类,再执行子类。原创 2023-07-09 23:27:14 · 1579 阅读 · 0 评论 -
C#系列之里氏替换原则
概念:父类容器转子类对象作用:方便进行对象的存储和管理。使用is,asis用于判断as用于转换注意:不能用子类容器装父类对象。里氏替换原则是用父类装子类,但是父类对象只能使用父类方法,需要用子类的方法,就需要将对象通过IS判断,然后通过AS转换为子类,再使用子类中的方法。原创 2023-07-09 20:58:36 · 322 阅读 · 0 评论 -
C#系列之继承的基本概念
一个类A继承一个类B,类A会继承类B的所有成员,A类将拥有B类的所有行为和特征。特点:单根性,子类只能有一个父类。传递性,子类可以间接继承父类的父类。内部的 只有在同一个程序集的文件中,内部类型或者是成员才可以访问。出现与父类相同的成员,冒波浪线,会隐藏父类的成员。概念:C#允许子类存在和父类同名的成员。被继承的类称为父类,基类,超类。class 类名:被继承的类名。子类可以有自己的特征和行为。继承的类称为子类,派生类。父类可以被多个子类继承!保护的 内部子类访问。C#不支持多个父类。原创 2023-07-09 20:01:09 · 72 阅读 · 0 评论 -
C#系列之内部类和分部类
特点:不能加访问修饰符,默认私有。只能在分部类中声明,返回值只能是void,可以有参数但不用out关键字,局限很大,了解即可。分部方法无法添加访问修饰符,一旦添加访问修饰符就必须实现,而分部方法是分开实现,所以不能添加访问修饰符。因为没有访问修饰符,所以不能通过类名点出来使用。作用:分部描述一个类,增加程序的拓展性。而分部类的使用上和普通类没有什么区别。内部类就是类里面的类,默认类为私有。,分部类的访问修饰符要一致,分部类。概念:在一个类中再声明一个类。概念:把一个类分成几部分声明。作用:亲密关系的变现。原创 2023-07-09 14:56:31 · 338 阅读 · 0 评论