C#面试题——面试题整理(2)

一 面试题汇总

  1. 什么是强类型,什么是弱类型?哪种更好些?为什么?
  2. using关键字的作用
  3. ref和out有什么区别
  4. a.Equals(b)和a==b一样吗?
  5. 下面这段代码求值
  6. Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少?
  7. &和&&的区别
  8. i++和++i的区别
  9. as和is的区别

二 面试题解答(仅供参考)

2.1 什么是强类型,什么是弱类型?哪种更好些?为什么?

1
2
3
强类型是在编译的时候就确定类型的数据,在执行时类型不能更改,
弱类型在执行的时候才会确定类型。
没有好不好,二者各有好处,强类型安全,因为它事先已经确定好了,而且效率高

2.2 using关键字的作用

1
2
3
1.引用命名空间,也可using 别名-

2.释放资源,实现了IDisposiable的类在using中创建,using结束后会自定调用该对象的Dispose方法,释放资源。

2.3 ref和out有什么区别

1
2
3
4
5
6
7
8
9
10
1.都是按引用类型进行传递
2.属性不是变量不能作为out、ref参数传递
3.ref参数必须初始化。out不需要初始化
4.作用,当方法有多个返回值时,out非常有用

传递方式:
ref 和 out 都是使用传址的方式来传递参数的,即将变量的内存地址直接传递给函数。
但是,它们之间在传递参数时的限制不同。
在使用 ref 修饰参数时,必须在调用函数之前对参数进行赋值,否则编译器会报错。
而在使用 out 修饰参数时,不需要在调用函数之前对参数进行赋值。

2.4 a.Equals(b)和a==b一样吗?

1
不一样,a==b仅仅表示a和b值相等,a.Equals(b)表示a与b一致

2.5 下面这段代码求值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Class1
{
internal static int count = 0;
static Class1()
{
count++;
}
public Class1()
{
count++;
}
}
Class1 o1 = new Class1();
Class1 o2 = new Class1();

静态构造函数是一种特殊的函数,它不能被显式调用,而是在第一次使用类的静态成员或创建类的实例时自动调用。
上面代码,静态构造函数被调用一次,然后构造函数被调用两次,所以答案是3

2.6 Math.Round(11.5)等於多少? Math.Round(-11.5)等於多少?

1
2
Math.Round(11.5)=12
Math.Round(-11.5)=-12

2.7 &和&&的区别

1
2
3
4
5
1.逻辑运算:&和&&都可作逻辑与的运算
&&具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式
&会计算二个表达式
2.位运算
&可以用作位运算,返回结果是int类型

2.8 i++和++i的区别

1
2
3
i++ 和 ++i 都是自增运算符,它们都可以将变量的值加 1
++i是先给i加1之后将i+1的结果返回
i++是将i的结果返回后,再给i加1

2.9 as和is的区别

1
2
3
4
as在转换的同时判断兼容性,如果无法进行转换,
返回位null(没有产生新的对象),as转换是否成功判断的依据是是否位null

is只是做类型兼容性判断,并不执行真正的类型转换,返回true或false,对象为null也会返回false。

三 参考

  • C#面试题