unity总结九

来源:互联网 发布:超级直播软件apk 编辑:程序博客网 时间:2024/06/05 00:32

c#中的值类型和引用类型:


这里可以看出类属于引用类型,数据是放在堆上的,struct是值类型,里面的数据放在栈上


摘自:http://www.tracefact.net/CSharp-Programming/Delegates-and-Events-in-CSharp.aspx

深入讲解委托和事件:

比如一个函数输出早上好,但是当有外国人时,输出good morning,那么要在函数中参数传入language,用swith判断是哪个语言,输出不同的早上好函数。但是这在设计模式上不容易扩展。我们把language参数改成一个委托,用委托来调用到底使用哪个函数


在客户端函数参数调用不同的方法,在类里面写函数的时候,参数是一个委托,实参传的是函数的地址,形参用委托接收,通过委托自动调用想用的方法,可以理解为,通过委托机制,实现了函数上的多态。通过语义可以理解为,我想调用不同的函数可以通过委托机制委托它帮我自动调用

委托的好处是:避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性

当然,委托也可以一次调用多个函数,前提将多个函数绑定上:

GreetingDelegate delegate1;    delegate1 = EnglishGreeting; // 先给委托类型的变量赋值    delegate1 += ChineseGreeting;   // 给此委托变量再绑定一个方法     // 将先后调用 EnglishGreeting 与 ChineseGreeting 方法    GreetPeople("Jimmy Zhang", delegate1);  输出为:Morning, Jimmy Zhang早上好, Jimmy Zhang
委托的缺点:

在类中定义委托前面要加上public这样才能在客户端通过+=来添加函数,但是这样破坏了对象的封装性

事件(event关键字):是委托的改进版,不管是不是声明为public,它总是被声明为private,委托在客户端可以直接调用,事件不行,只能在事件内部类中或者某些操作触发。

笔试题:in ,out, ref , paras的作用和区别

作用


笔试题:

 Base baseTemp = new Base();
            baseTemp = new Child();

第一行会调用Base类的构造函数,但是第二行又开辟了子类对象,那么请问第二行的时候会调用Base类的析构函数吗?

自己当时想的是如果此时不析构那么baseTemp指针被覆盖了就没法析构了所以第二行的时候会调用Base类的析构函数

答案:不会调用析构函数这两个类统一在main函数完后析构,自己的问题是,那么指向Base类的指针baseTemp被覆盖了,如何析构Base呢?

原因是没有被覆盖,而是指向自己的子类了,c++中先调用父类的构造,子类的构造,在调用子类析构,再调用父类析构,在main函数return前析构子类,然后看该类是不是多态,是的话还得继续析构父类。


笔试题

Unity3D 关于lightmap,mipMap和LOD是啥?

LOD:优化性能的技术,通过物体离相机的距离来渲染不同的Mesh以达到网格面数上的优化,LOD是在网格面数上做优化, 而mipMap是在贴图上做优化,不同距离使用不同像素的贴图来渲染以达到加快渲染速度和减少图像锯齿。 
lightmap:光遇到物体时需要产生反射效果,但是unity中没有这种效果。使用lightMap去烘焙一个物体使射到它身上的光能够产生反射效果

shaderLab中RenderType和Queue分别是什么?
"LightMode"="Vertex""Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane"


笔试题:
unity中打包和加载资源的方式是什么?
资源加载:

1、Resources.Load

对应的目录:Assets/Resources

2、WWW加载AssetBundle

打包:
1  用unity自带的
2   AssetBundle

笔试题中int a = 010;按理说前面加一个0表示的是八进制,要把这个八进制转成10进制,但是在vs的c#里面跑出来结果是10,有点纳闷了,咋回事呢?

原创粉丝点击