12.26 C#基础

一、for foreach Enumerator.MoveNext的使用与内存消耗情况

for循环可以通过索引依次进行遍历,foreach和Enumerator.MoveNext通过迭代的方式进行遍历,内存消耗上本质没有太大区别,但在Update中一般不推荐使用foreach,因为会遗留内存垃圾

二、foreach迭代器遍历和for循环遍历的区别

如果集合需要foreach遍历,是否可行,存在一定问题
foreach中的迭代变量item是的只读,不能对其进行修改,比如list.Remove(item)操作
foreach只读的时候记录下来,在对记录做操作,或者直接用for循环遍历
foreach对int[]数组循环已经不产生GC,避免对ArrayList进行遍历

for语句中初始化变量i的作用域,循环体内部可见。
通过索引进行遍历,可以根据索引对所遍历集合进行修改
unity中for循环使用lambda表达式注意闭包问题

foreach遍历原理
任何集合类(Array)对象都有一个GetEnumerator()方法,该方法可以返回一个实现了 迭代器IEnumerator接口的对象。
这个返回的IEnumerator对象既不是集合类对象,也不是集合的元素类对象,它是一个独立的类对象。
通过这个实现了 IEnumerator接口对象A,可以遍历访问集合类对象中的每一个元素对象
对象A访问MoveNext方法,方法为真,就可以访问Current方法,读取到集合的元素。

三、JIT和AOT区别

Just-In-Time -实时编译

执行慢安装快占空间小一点

Ahead-Of-Time -预先编译

执行快安装慢占内存占外存大

四、给定一个存放参数的数组,重新排列数组(?

void SortArray(Array arr){Array.Sort(arr);}

五、当需要频繁创建使用某个对象时,有什么好的程序设计方案来节省内存?

设计单例模式进行创建对象或者使用对象池

六、C#的委托是什么?有何用处?

委托类似于一种安全的指针引用,在使用它时是当做类来看待而不是一个方法,相当于对一组方 法的列表的引用,可以便捷的使用委托对这个方法集合进行操作。委托是对函数指针的封装。

用处:使用委托使程序员可以将方法引用封装在委托对象内。然后可以将该委托对象传递给可调 用所引用方法的代码,而不必在编译时知道将调用哪个方法。与C或C++中的函数指针不同,委托 是面向对象,而且是类型安全的。

七、C#中委托和事件的区别

大致来说,委托是一个类,该类内部维护着一个字段,指向一个方法。事件可以被看作一个委托类型的变量,通过事件注册、取消多个委托或方法。

  • 委托可以用“=”来赋值,事件不可以。
  • 委托可以在声明它的类外部进行调用,而事件只能在类的内部进行调用。
  • 委托是一个类型,事件修饰的是一个对象。
  • 委托就是一个类,也可以实例化,通过委托的构造函数来把方法赋值给委托实例
  • 触发委托有2种方式: 委托实例.Invoke(参数列表),委托实例(参数列表)
  • 事件可以看作是一个委托类型的变量
  • 通过+=为事件注册多个委托实例或多个方法
  • 通过-=为事件注销多个委托实例或多个方法
  • EventHandler就是一个委托

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值