net面试题

发布时间 2023-07-13 14:09:16作者: 小溪_1

1. 什么是扩展方法

扩展方法使你能够向现有类型"添加"方法,无需修改类型。

条件:按扩展方法必须满足的条件,1必须是静态类中的静态方法,2.第一个参数类型是要扩展的类型,并且需要添加this关键字以表示其扩展方法。

2. const和readonly的区别

都标识一个常量。

区别:

    1. 初始化位置不同,const必须在声明的同时赋值;readonly即可以在声明处赋值,也可以在静态构造方法(必须是静态构造方法,普通构造方法不行)里赋值
    2. 修饰对象不同,const可以修饰类的字段,也可以修饰局部变量;readonly只能修饰类的字段
    3. const是编译时常量,在编译时确定改值;readonly是运行时常量,在运行时确定该值
    4. const默认是静态的,而readonly如果设置成静态需要显示声明
    5. 修饰引用类型时不同,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的区别

相同点:都可以实现接口

不同点

    1. class是引用类型,struct是值类型
    2. class允许继承,被继承,struct不允许,只能继承接口
    3. class可以初始化变量,struct不可以
    4. class可以有无参构造函数,struct不可与,必须是有参的构造函数,而且在有参的构造函数必须初始化所有成员

7. 抽象类和接口的区别

相同点:都不能直接实例化

不同点:

  1. 抽象类用abstrace修饰,接口用interface修饰
  2. 抽象类中的方法可以实现,也可以不实现。有抽象方法的类一定要用abstract修饰,接口中的方法不允许被实现。
  3. 抽象类只能单继承,接口支持多实现
  4. 抽象类有构造方法,接口不能有构造方法
  5. 接口只负责功能的定义,通过接口来规范类的。而抽象类即负责功能的定义有可以实现哪些功能。

8. 类的执行顺序

父类,子类,静态块,静态字段,非静态块,非静态字段,构造器,方法

9. C#有没有静态构造函数,如果有是做什么用的

静态构造函数既没有访问修饰符,也没有参数。在创建第一个实例或引用任何静态成员之前,将自动调用静态构造函数来初始化类。无法直接调用静态构造函数。在程序中,用户无法控制何时执行静态构造函数‘

用途:当类使用日志文件时,将使用这种构造函数向日志文件中写入项

10. 泛型的主要约束和次要约束是什么

  • 一个泛型参数至多拥有一个主要约束,主要约束可以是引用类型、class或struct.如果指定一个引用类型(class),那么实参必须是该类型或者该类型的派生类型。相反,struce则规定必须是一个值类型。
  • 次要约束
    • 主要是实参实现的接口限定,对于一个泛型,可以有0到无限的次要约束,次要约束规定了实参必须实现所有的次要约束中规定的接口。

11. Set里面的元素是不可重复的,那么用什么方法来区分重复与否?是用==还是equals()?它们有什么区别?

set的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()是判断两个set是否相等。

equals()和==方法决定引用值是否指向统一对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回true。