0
点赞
收藏
分享

微信扫一扫

Unity面试题——C#知识

全栈顾问 2022-05-04 阅读 41
c#

目录

C#知识:

C#有几种数据类型?

值类型和引用类型有何区别?

堆(Heap)和栈(Stack)有何区别?

ArrayList和List的主要区别?

拆箱和装箱是什么?

sealed关键字用在类声明时与函数声明时的作用是什么?

请简述private,public,protected,internal的区别?

重载和重写的区别?重载和重写的区别?

描述接口(Interface)与抽象类(abstract class)之间的相同点及区别?如何选择抽象类和接口?(个人理解)

描述结构体(Struct)与类(class)之间的区别?如何选择结构体与类?(个人理解) 

ref和out作用是什么?有什么区别? 

C#的委托(delegate)和事件(event)


C#知识:

  • C#有几种数据类型?

值类型和引用类型

值类型:简单数据类型(整数类型:sbyte,short,int,long,byte,ushort,uint,ulong;浮点数类型:float,double;布尔类型:bool;字符类型:char);枚举;结构体

引用类型:对象类;数组类;字符串类(string);接口类;委托类

  • 值类型和引用类型有何区别?

1.值类型的数据存储在内存的栈上;引用类型的数据存储在内存的堆中;引用类型的变量持有的是数据的引用,引用在栈上

2.值类型存取速度快,引用类型存取速度慢

3.值类型表示的是实际数据,引用类型表示的是指向存储在内存堆中的数据的引用

4.值类型继承System.ValueType;引用类型继承System.Object

  • 堆(Heap)和栈(Stack)有何区别?

1.栈的空间由操作系统自动分配和释放,堆的空间是手动申请和释放的,堆常用new关键字来分配,堆在.NET中会有GC来释放

2.栈的空间有限,堆的空间很大

  • ArrayList和List的主要区别?

1.ArrayList存在不安全类型 :ArrayList会把所有插入其中的数据当成Object来处理,装箱拆箱操作费时

2.List是接口,ArrayList是一个实现了该接口的类,可以被实例化

  • 拆箱和装箱是什么?

装箱:将值类型转换成引用类型

拆箱:将引用类型转成值类型

  • sealed关键字用在类声明时与函数声明时的作用是什么?

 sealed修饰的类为密封类,类声明时可以防止其他类继承此类,在方法中声明则防止派生类重写此方法。

  • 请简述private,public,protected,internal的区别?

private:仅仅对该类公开 

public:对任何类都公开

protected:对该类及该类的派生类(子类)公开

internal:只能在包含该类的程序集中访问该类

  • 重载和重写的区别重载和重写的区别

重写(overriding):子类的方法覆盖父类的方法,要求返回值、方法名和参数都相同。

方法重载(overloading):重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,

  • 描述接口(Interface)与抽象类(abstract class)之间的相同点及区别?如何选择抽象类和接口?(个人理解)

相同点:

1.都可以被继承

2.都不能直接实例化

3.都可以包含方法的声明

4.子类必须实现未实现的方法

5.都遵循里氏替换原则

不同点:

1.抽象类中可以有构造函数,接口不能有

2.抽象类只能被单一继承,接口可以实现多个

3.抽象类中有成员变量,接口中没有

4.抽象类中可以声明成员方法,虚方法,没有实现的抽象方法,静态方法,接口只能声明没有实现的抽象方法

5.抽象类方法可以使用访问修饰符,接口中建议不写,默认为public

 选择方式:表示对象的用抽象类,表示行为的用接口,不同对象拥有共同的行为往往使用接口

  • 描述结构体(Struct)与类(class)之间的区别?如何选择结构体与类?(个人理解) 

1.结构体是值类型,类是引用类型

2.结构体存在栈上,类存在堆中

3.结构体成员不能使用protected访问修饰符,类可以

4.结构体成员变量声明不能指定初始值,类可以

5.结构体不能声明无参构造函数,类可以

6.结构体声明有参构造函数后,无参构造函数会被顶掉 

7.结构体不能声明析构函数,类可以

8.结构体不能被继承,类可以

9.结构体需要在构造函数中初始化所有成员变量,类随意初始化

10.结构体不能被静态static修饰(不存在静态结构体),类可以

11.结构体不能在自己的内部声明和自己一样的结构体变量,类可以

选择方式:

1.使用继承或者是多态时,选择类

2.对象是数据集合时,考虑结构体,例:坐标,位置等

3.从值类型和引用类型上考虑,存储的数据量大用类,速度快用结构体

  • ref和out作用是什么?有什么区别? 

ref引用参数和out引用参数的效果一样,都是通过关键字找到内存地址 

区别就是使用 ref 进行参数的传递时,该参数在创建时,必须设置其初始值,所以ref 侧重于修改,采用 out 参数传递时,该参数在创建时,可以不设置初始值,但是在方法中必须初始化,所以 out 侧重于输出

  • C#的委托(delegate)和事件(event)

1.C#中事件:事件时属于类的成员,所以要放在类的内部,C#事件本质就是对消息的封装,用作对象之间的通信;发送方叫事件发送器,接收方叫事件接收器

2.委托属于一个定义,是和类、接口类似的,通常放在外部,若定义在类的内部,则必须通过调用该类的成员才能取得其委托的引用

待补充~

举报

相关推荐

0 条评论