唐老狮c#核心笔记
唐老狮c#核心笔记
- 类和对象
第一题,B=null时,引用置空了,B与A无关系,A还是原来new的地址
第二题,B指向新的地址了,还是与A无关系,AB分别指向不同的地址 - 访问修饰符
-
构造函数与析构函数
先调用了一个name参数的构造函数然后执行第二个两个参数的构造函数
-
垃圾回收
#region 知识点四 垃圾回收机制 //垃圾回收,英文简写GC(Garbage Collector) //垃圾回收的过程是在遍历堆(Heap)上动态分配的所有对象 //通过识别它们是否被引用来确定哪些对象是垃圾,哪些对象仍要被使用 //所谓的垃圾就是没有被任何变量,对象引用的内容 //垃圾就需要被回收释放 //垃圾回收有很多种算法,比如 //引用计数(Reference Counting) //标记清除(Mark Sweep) //标记整理(Mark Compact) //复制集合(Copy Collection) //注意: //GC只负责堆(Heap)内存的垃圾回收 //引用类型都是存在堆(Heap)中的,所以它的分配和释放都通过垃圾回收机制来管理 //栈(Stack)上的内存是由系统自动管理的 //值类型在栈(Stack)中分配内存的,他们有自己的生命周期,不用对他们进行管理,会自动分配和释放 //C#中内存回收机制的大概原理 //0代内存 1代内存 2代内存 //代的概念: //代是垃圾回收机制使用的一种算法(分代算法) //新分配的对象都会被配置在第0代内存中 //每次分配都可能会进行垃圾回收以释放内存(0代内存满时) //在一次内存回收过程开始时,垃圾回收器会认为堆中全是垃圾,会进行以下两步 //1.标记对象 从根(静态字段、方法参数)开始检查引用对象,标记后为可达对象,未标记为不可达对象 // 不可达对象就认为是垃圾 //2.搬迁对象压缩堆 (挂起执行托管代码线程) 释放未标记的对象 搬迁可达对象 修改引用地址 //大对象总被认为是第二代内存 目的是减少性能损耗,提高性能 //不会对大对象进行搬迁压缩 85000字节(83kb)以上的对象为大对象
//手动触发垃圾回收的方法
//一般情况下 我们不会频繁调用
//都是在 Loading过场景时 才调用
GC.Collect(); #endregion - 成员属性
-
索引器
索引器可以重载
- 静态成员
静态成员运行程序就会有,所以在静态成员中不能使用非静态成员,因为此时非静态成员都还没创建
静态过多的话,占用了过多的内存不会释放 - 静态构造函数
- 拓展方法
- 运算符重载
- 继承
- 里氏替换原则
GameObject父类
- 继承中的构造函数
- object类与装箱、拆箱
- 多态
- 抽象类和抽象方法
- 接口
- object对象
object.Memberwise方法返回一个浅拷贝的对象,只拷贝对象的引用,引用指向的还是同一个地方 - String
indexof找不到返回-1
反向查找,找到第一个,返回第一个的索引,反向找到的第一个"唐老狮"是最后面的,下标是5,所以返回5,如果没找到也返回-1
Remove方法不会改变原字符串,会返回一个新的字符串,这里重载的参数4和1,在移除的时候,包括该下标自己
-
StringBuilder
-
结构体与类
#region 区别概述 //结构体和类最大的区别是在存储空间上的,因为结构体是值,类是引用, //因此他们的存储位置一个在栈上,一个在堆上, //通过之前知识点的学习,我相信你能够从此处看出他们在使用的区别——值和引用对象在赋值时的区别。 //结构体和类在使用上很类似,结构体甚至可以用面向对象的思想来形容一类对象。 //结构体具备着面向对象思想中封装的特性,但是它不具备继承和多态的特性,因此大大减少了它的使用频率。 //由于结构体不具备继承的特性,所以它不能够使用protected保护访问修饰符。 #endregion #region 细节区别 //1.结构体是值类型,类是引用类型 //2.结构体存在栈中,类存在堆中 //3.结构体成员不能使用protected访问修饰符,而类可以 //4.结构体成员变量申明不能指定初始值,而类可以 //5.结构体不能申明无参的构造函数,而类可以 //6.结构体申明有参构造函数后,无参构造不会被顶掉 //7.结构体不能申明析构函数,而类可以 //8.结构体不能被继承,而类可以 //9.结构体需要在构造函数中初始化所有成员变量,而类随意 //10.结构体不能被静态static修饰(不存在静态结构体),而类可以 //11.结构体不能在自己内部申明和自已一样的结构体变量,而类可以 #endregion #region 结构体的特别之处 //结构体可以继承 接口 因为接口是行为的抽象 #endregion #region 如何选择结构体和类 //1.想要用继承和多态时,直接淘汰结构体,比如玩家、怪物等等 //2.对象是数据集合时,优先考虑结构体,比如位置、坐标等等 //3.从值类型和引用类型赋值时的区别上去考虑,比如经常被赋值传递的对象,并且 //改变赋值对象,原对象不想跟着变化时,就用结构体。比如坐标、向量、旋转等等 #endregion
- 抽象类与接口
#region 知识回顾 //抽象类和抽象方法 //abstract修饰的类和方法 //抽象类 不能实例化 //抽象方法只能在抽象类中申明 是个纯虚方法 必须在子类中实现 //接口 //interface 自定义类型 //是行为的抽象 //不包含成员变量 //仅包含方法、属性、索引器、事件,成员都不能实现,建议不写访问修饰符,默认public #endregion #region 知识点一 相同点 //1.都可以被继承 //2.都不能直接实例化 //3.都可以包含方法申明 //4.子类必须实现未实现的方法 //5.都遵循里氏替换原则 #endregion #region 知识点二 区别 //1.抽象类中可以有构造函数;接口中不能 //2.抽象类只能被单一继承;接口可以被继承多个 //3.抽象类中可以有成员变量;接口中不能 //4.抽象类中可以申明成员方法,虚方法,抽象方法,静态方法;接口中只能申明没有实现的抽象方法 //5.抽象类方法可以使用访问修饰符;接口中建议不写,默认public #endregion #region 如何选择抽象类和接口 //表示对象的用抽象类,表示行为拓展的用接口 //不同对象拥有的共同行为,我们往往可以使用接口来实现 //举个例子: //动物是一类对象,我们自然会选择抽象类;而飞翔是一个行为,我们自然会选择接口。 #endregion
本文作者:Nyan
本文链接:https://www.cnblogs.com/nyan/p/17651585.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步