目录
请简述private,public,protected,internal的区别?
描述接口(Interface)与抽象类(abstract class)之间的相同点及区别?如何选择抽象类和接口?(个人理解)
描述结构体(Struct)与类(class)之间的区别?如何选择结构体与类?(个人理解)
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.委托属于一个定义,是和类、接口类似的,通常放在外部,若定义在类的内部,则必须通过调用该类的成员才能取得其委托的引用
待补充~