1. 什么是扩展方法
扩展方法使你能够向现有类型"添加"方法,无需修改类型。
条件:按扩展方法必须满足的条件,1必须是静态类中的静态方法,2.第一个参数类型是要扩展的类型,并且需要添加this关键字以表示其扩展方法。
2. const和readonly的区别
都标识一个常量。
区别:
- 初始化位置不同,const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在静态构造方法(必须是静态构造方法,普通构造方法不行)里赋值
- 修饰对象不同,const可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段
- const是编译时常量,在编译时确定改值;readonly是运行时常量,在运行时确定该值
- const默认是静态的,而readonly如果设置成静态需要显示声明
- 修饰引用类型时不同,const只能修饰string或者值为null的其他引用类型;readonly可以是任何类型
3. CTS、CLS、CLR
CTS:通用语言系统(Common Type System)
CLS:通用语言规范(Common Language Specification)
CLR:公共语言运行库(Common Language Runtime)
4. C#可否对内存直接操作
C#在unsafe模式下可以使用指针对内存进行操作,但在托管模式下不可以使用指针,C# Net默认不运行带指针的,需要设置下,选择项目右键->属性->选择生成->允许不安全代码 打√->保存
5. short s=1;s=s+1;有什么错误?short s1=1,s1+=1;有什么错误
s=s+1不能显示转换成short类型,可以修改为s=(short)(s+1).short s1=1;s1+=1正确
6. class和struct的区别
相同点:都可以实现接口
不同点
- class是引用类型,struct是值类型
- class允许继承,被继承,struct不允许,只能继承接口
- class可以初始化变量,struct不可以
- class可以有无参构造函数,struct不可与,必须是有参的构造函数,而且在有参的构造函数必须初始化所有成员
7. 抽象类和接口的区别
相同点:都不能直接实例化
不同点:
- 抽象类用abstrace修饰,接口用interface修饰
- 抽象类中的方法可以实现,也可以不实现。有抽象方法的类一定要用abstract修饰,接口中的方法不允许被实现。
- 抽象类只能单继承,接口支持多实现
- 抽象类有构造方法,接口不能有构造方法
- 接口只负责功能的定义,通过接口来规范类的。而抽象类即负责功能的定义有可以实现哪些功能。
8. 类的执行顺序
父类,子类,静态块,静态字段,非静态块,非静态字段,构造器,方法
9. C#有没有静态构造函数,如果有是做什么用的
静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数‘
用途:当类使用日志文件时,将使用这种构造函数向日志文件中写入项
10. 泛型的主要约束和次要约束是什么
- 一个泛型参数至多拥有一个主要约束,主要约束可以是引用类型、class或struct.如果指定一个引用类型(class),那么实参必须是该类型或者该类型的派生类型。相反,struce则规定必须是一个值类型。
- 次要约束
- 主要是实参实现的接口限定,对于一个泛型,可以有0到无限的次要约束,次要约束规定了实参必须实现所有的次要约束中规定的接口。
11. Set里面的元素是不可重复的,那么用什么方法来区分重复与否?是用==还是equals()?它们有什么区别?
set的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判断两个set是否相等。
equals()和==方法决定引用值是否指向统一对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回true。
标签:面试题,静态,接口,修饰,类型,net,class,构造函数 From: https://www.cnblogs.com/xiaoxi888/p/17550294.html