Unity C#知识点记录

C#值类型和引用类型

值类型的变量直接存储数据,值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。

引用类型的变量持有的是数据的引用,数据存储在数据堆中。

值类型直接存储其值,而引用类型存储对其值的引用

拆箱和装箱

装箱:将值类型(如 int ,或自定义的值类型等)转换成 object 或者接口类型的一个过程

拆箱就是从对象中提取对应的值类型的一个过程。

  装箱是隐式的;拆箱必定是显式的。

代码表示:

    int i = 123;      // 值类型
    object o = i;     // 装箱
    int j = (int)o;   // 拆箱

重载和重写的区别?

1:所处的位置不 同  重载在同类中 ;重写在父子类中;

2:定义方式不同

   重载方法名相同,参数列表(参数个数,参数类型)不同;

   重写方法名和参数列表都相同,父类中使用virtual关键字来把某个方法定义为虚方法,子类中使用Override关键字重写父类的虚方法;

3:调用方式不同  重载使用相同对象以不同参数调用;重写用不同对象以相同的参数调用;

4:多态时机不同  重载是编译时多态;重写是运行时多态;

String和StringBuilder的区别

1: String是不可变类,StringBuilder是可变类。

2: StringBuilder继承自AbstractStringBuilder这个类,而AbstractStringBuilder和String都继承自Object这个类(Object是所有java类的超类)。

3: string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响,这会降低.NET编译器的工作效率。

4: StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能。

总结一下

1、string继承object类,stringbuilder继承AbstractStringBuilder。
2、string是不可变类,stringbuilder是可变类。
3、stringstringbuilder运行速度比string快。

C#和C++相比结构体的独有用法

结构可带有方法、字段、索引、属性、运算符方法和事件。
结构可定义构造函数,但不能定义析构函数。但是,您不能为结构定义默认的构造函数。默认的构造函数是自动定义的,且不能被改变。
结构可实现一个或多个接口。
结构成员不能指定为 abstract、virtual 或 protected。
当您使用 New 操作符创建一个结构对象时,会调用适当的构造函数来创建结构。

const  readonly 与sealed

  • const和readonly都是只读的。
  • 对于const,其修饰的常量类型为静态常量;
    对于readonly,其修饰的常量类型为动态常量。
  • const高效,readonly灵活。
  • 实际使用中,常常用static readonly来代替const,以此来平衡const在灵活性上的不足。

sealed,即密封类和密封方法。

在方法中使用sealed,只能是在已经被重写的方法中定义sealed,表示这个方法不可以再被重写。

委托,delate:三种泛型委托

Predicate <T>      Action<T>      Func

1.在这些方法中存在一个Predicate <T> 表达式,它是一个返回bool的泛型委托,能接受一个任意类型的对象作为参数。

2.Action<T> 的使用方式与 Predicate<T> 相似,不同之处在于 Predicate<T> 返回值为 bool , Action<T> 的返回值为 void。

3.委托 Func 与 Action 相似,同样支持 0~16 个参数,不同之处在于Func 必须具有返回值

协程与线程的区别

  一个线程可以多个协程,一个进程也可以单独拥有多个协程。

  线程进程都是同步机制,而协程则是异步。

线程是协程的资源。协程通过Interceptor来间接使用线程这个资源。

结构和类的区别

结构是值类型,它在栈中分配空间

类是引用类型,它在堆中分配空间,栈中保存的只是引用

Struct变量使用完之后就自动解除内存分配,Class实例有垃圾回收机制来保证内存的回收处理。

结构体中声明的字段无法赋予初值,类可以

结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制

 三种实现计时器的方法

1. System.Windows.Forms命名空间下的Timer控件

MyTimer.Enabled = true;  //启动计时器
MyTimer.Interval = 1000; //设置计时器时间间隔,单位为ms

MyTimer.Stop(); //停止计时

MyTimer.Start(); //重新计时

2. system.Timers命名空间下的Timer类,使用Elapsed事件另开一个线程。

3. System.Threading.Timer类。定义Timer类时,通过构造函数进行初始化。

unity 生命周期

Awake-----OnEnable-----Start-----FixedUpdate------Update-------LateUpdate-----OnDisable-------OnDestroy--------OnApplicationQuit 

 

posted @ 2021-06-22 16:25  剑起苍穹  阅读(147)  评论(0编辑  收藏  举报
/*鼠标点击特效*/