复习笔记-Unity
泛型与Object区别
- Object是所有类型的基类,泛型是一种数据类型,将类型参数化达到代码复用提高软件开发效率
- 泛型不用装箱拆箱,泛型是替换,将泛型参数替换成具体的类型,并且不需要强制类型转换,并且编译时自动检查类型安全,避免隐性的类型转换异常。
Toggle与Button
监听事件:
Toggle:OnValueChanged
Button:onClick
MVC
Model,View,Controller
Module-->Controller
数据存储在ModuleData中,包含数据的定义
模块在Model中,通过删除Module删除页面
Controller
用于连接View和Model
协程与线程区别,或优势
补位
缓冲池
委托和事件
- 委托相当于函数容器,首先需要定义一个函数模板
- 可以通过+=注册,Invoke调用
- Delegate存在被赋值的风险
- event 操作赋值将不会发生 将赋值操作设置为Private
- event 只能在函数内部执行
背包系统的数据库设计
序列化与反序列化
Func和Action
一个有返回值一个没有返回值,委托
C#语法
重载和重写
生命周期函数
FixedUpdate函数:物理计算相关,可以在Player Settings中设置帧率,也可以利用Application调用帧数
值类型和引用类型
值类型存储在栈上,
引用类型存储在堆上
深拷贝浅拷贝
假设T是一个引用类型
T t1=new T();
T temp=t1;
浅拷贝:temp对象和t1对象共同指向同一块堆空间
深拷贝:需要重新new T()再将t1中的所有值都赋值再temp中
垃圾回收机制
托管方式:将未使用的资源清除,然后压缩
处理非托管资源方法:
析构函数,在对象被回收时调用的函数
public class TestDispose : IDisposable{
private bool mDisposed;
public TestDispose()
{
}
~TestDispose(){
Dispose();
}
public void Dispose()
{
//释放非托管资源
if (!mDisposed){
GC.suppressFinalize(this); //标记gc不再调用析构函数
mDisposed = true;
}
}
}
装箱和拆箱
装箱:栈=>堆
int a=6;
Object intObject=a;
拆箱
a=(int)intObject;
接口 interface 和抽象类abstract
interface
可以是一些动作,没有明显的类型区分,比如:攻击,行走......
abstract
类型比较明显,人类->中国人
for 和 foreach
foreach能够遍历非线性容器:Hash
foreach(var item in intList){
//无法修改item
}
string不变性
不会创建相同的字符串
字符串不适合频繁的拼接,例如下面的情况👇
string s=string.Empty;//不合适string s="";
//判空 string.IsNullOrEmpty(s);
for(int i=0;i<100;i++){
s=s+"abc";
}
//可以采用
string.Concat(s,"abc");
//也可以
StringBuilder strbuilder=new ..();
for(int i=0;i<100;i++){
strbuilder.Append("abc");
}
数组和List区别
int[] intArray=new int[5];
List<int> intList=new List<int>(5);
intList.Add(0);
静态构造函数
访问静态成员时,触发,并只执行一次
常用容器类
Stack
先进后出
Queue
先进先出
Array数组
ArrayList
Object类型,不安全
List
泛型
LinkList 双向链表
删除效率高一些
HashTable 哈希表
与Dictionary差别
Hashtable和Dictionary都是.Net下的表示键值对的集合,那么我们在使用中该选择Hashtable还是Dictionary?下边我们看看他们之间的区别:
1、Dictionary<K,V>在使用中是顺序存储的,而Hashtable由于使用的是哈希算法进行数据存储,是无序的。2、Dictionary的key和value是泛型存储,Hashtable的key和value都是object
3、Dictionary是泛型存储,不需要进行类型转换,Hashtable由于使用object,在存储或者读取值时都需要进行类型转换,所以比较耗时
4、单线程程序中推荐使用Dictionary,有泛型优势,且读取速度较快,容量利用更充分。多线程程序中推荐使用
Hashtable,默认的Hashtable 允许单线程写入,多线程读取,对Hashtable进一步调用Synchronized()方法可以获得完全线程安全的类型.而Dictionary非线程安全,必须人为使用lock语句进行保护,效率大减。
5、在通过代码测试的时候发现key是整数型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率没有Hashtable快。
对于如何进行选择,个人倾向于使用Dictionary,原因是:
1、Dictionary是可排序的,Hashtable如果想排序还需要采用别的方式进行
2、Dictionary有泛型优势,效率要高
HashSet
一组不重复的元素集合
ref和out
传值和传引用
两个关键字作用差不多,都是能在函数内修改外边的值
ref:修饰引用参数
外边的变量必须赋值/创建,否则会报错
调用外面的变量,并能够修改他的值
可以直接使用外边的值
out:修饰输出参数
函数内,必须先赋值/创建这个变量,否则报错
都能够修改值