前言:小弟收集了网上各大面试题并按照它们出现的频率进行了整理,如果对你有所帮助,欢迎评论和点赞,感谢~
一.简述四元数的作用,四元数对欧拉角的优点
四元数用于表示旋转
相对欧拉角的优点:
1.能进行增量旋转
2.避免万向锁
3.给定方位的表达方式有两种,互为负(欧拉角有无数种表达方式)
二. 请简述值类型与引用类型的区别
1.值类型存储在内存栈中,引用类型数据存储在内存堆中,实际存放的是内存堆中对象的地址。
2.值类型存取快,引用类型存取慢。
3.值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针或引用。
4.栈的内存是自动释放的,堆内存是.NET中会由GC来自动释放。
5.值类型继承自System.ValueType(它的父类是System.Object),引用类型继承自System.Object。
三.C#中所有引用类型的基类是什么
引用类型的基类是System.Object 值类型的基类是System.ValueType
同时,值类型也隐式继承自System.Object
四.请简述ArrayList和List的主要区别
ArrayList存在不安全类型(ArrayList会把所有插入其中的数据都当做Object来处理)
装箱拆箱的操作(费时)
IList是接口,AIrrayList和List都是实现了该接口的类,可以被实例化。
五.摄像机跟随人物移动
Transform player;
Vector3 offset=Vector3.zero;//偏移量
public float moveSpeed = 10f;//摄像机的移动速度
void Awake()
{
player = GameObject.FindGameObjectWithTag(Tags.player).transform;
offset = transform.position - player.position ;
}
// Update is called once per frame
void Update()
{
Vector3 targetPos = player.position + offset;
transform.position= Vector3.Lerp(transform.position, targetPos, moveSpeed*Time.deltaTime);//参数顺序很重要
}
六.C#中四种访问修饰符是哪些?各有什么区别?
1.属性修饰符 2.存取修饰符 3.类修饰符 4.成员修饰符。
属性修饰符:
Serializable:按值将对象封送到远程服务器。
STATread:是单线程套间的意思,是一种线程模型。
MATAThread:是多线程套间的意思,也是一种线程模型。
存取修饰符:
public:存取不受限制。
private:只有包含该成员的类可以存取。
internal:只有当前工程可以存取。
protected:只有包含该成员的类以及派生类可以存取。
类修饰符:
abstract:抽象类。指示一个类只能作为其它类的基类。
sealed:密封类。指示一个类不能被继承。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。
成员修饰符:
abstract:指示该方法或属性没有实现。
sealed:密封方法。可以防止在派生类中对该方法的override(重载)。不是类的每个成员方法都可以作为密封方法密封方法,必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰符总是和override修饰符同时使用。
delegate:委托。用来定义一个函数指针。C#中的事件驱动是基于delegate + event的。
const:指定该成员的值只读不允许修改。
event:声明一个事件。
extern:指示方法在外部实现。
override:重写。对由基类继承成员的新实现。
readonly:指示一个域只能在声明时以及相同类的内部被赋值。
static:指示一个成员属于类型本身,而不是属于特定的对象。即在定义后可不经实例化,就可使用。
virtual:指示一个方法或存取器的实现可以在继承类中被覆盖。
new:在派生类中隐藏指定的基类成员,从而实现重写的功能。 若要隐藏继承类的成员,请使用相同名称在派生类中声明该成员,并用 new 修饰符修饰它。
7.概述c#中代理和事件?
代理就是用来定义指向方法的引用。
C#事件本质就是对消息的封装,用作对象之间的通信;发送方叫事件发送器,接收方叫事件接收器