本资源是一份针对2021春招C#.NET笔试的基础题库,涵盖了C#编程语言的关键知识点。以下是对部分题目内容的详细解析:
1. **堆和栈的区别**:在C#中,堆(Heap)用于存储动态分配的对象实例,而栈(Stack)用于存储局部变量、方法调用时的临时数据。栈是线性的,内存管理自动,而堆则需要手动管理。
2. **委托与事件**:委托是C#中的功能组件,用于封装方法,可以看作是方法的引用。事件是一种特殊的委托,它允许对象之间通过发布/订阅的方式传递消息。
3. **静态构造函数**:静态构造函数是类首次被加载时执行,仅在类级别创建一次,不依赖于任何实例。
4. **CTS、CLS、CLR**:C#类型系统(CTS)定义了语言的类型规范,CLS是公共语言规范,规定了不同.NET框架间兼容的最低标准。CLR是.NET框架的核心,负责执行.NET代码。
5. **值类型与引用类型**:C#中的值类型(如int、struct)在栈上存储,复制时会复制值;引用类型(如class)在堆上存储,复制时复制的是引用。
6. **类(class)与结构(struct)**:类支持继承、多态和虚函数,适合复杂对象;结构更轻量级,没有默认的析构函数,主要用于性能优化。
7. **new关键字**:用于创建对象实例,也可以用于重载运算符或声明静态字段。
8. **int?和int**:int?是带有一个可能为null的整数类型的 Nullable<int>,提供了处理空值的能力。
9. **值传递与引用传递**:值传递会复制参数值,而引用传递则是传递变量的地址,修改引用会影响原始值。
10. **ref与out参数**:ref参数接收后可以直接修改原变量,out参数在函数结束后必须赋值,用于返回多个值。
11. **装箱和拆箱**:将值类型转换为对象的过程叫装箱,反之将对象转换回值类型叫拆箱,为了处理非引用类型的方法。
12. **重载与重写**:重载是同一类中方法签名相同的多个版本,重写是子类覆盖基类的方法,满足特定条件。
13. **static关键字**:用于标识静态成员,如静态变量、静态方法,不依赖于类实例即可访问。
14. **static成员的作用**:静态成员属于类,所有实例共享,无状态,适用于类级别的全局属性。
15. **索引器**:提供了一种通过下标访问数组或自定义类中数据的通用机制,不限于数字,可以接受任何类型的参数。
16. **abstractclass和interface**:抽象类可以包含抽象方法和具体方法,接口只定义方法签名,不能实例化;类继承抽象类,接口只能通过实现。
17. **sealed修饰**:表示类不能被继承,确保类的特性不会被子类修改。
18. **string、null、""与string.Empty**:stringstr = null表示未初始化的引用,str = ""表示空字符串,str = string.Empty表示一个预定义的空字符串,占用内存少。
19. **byte变量错误**:byte类型最大值为255,所以byted和byteg的赋值错误,byteg超过范围。
20. **string和StringBuilder**:string是不可变的,每次修改都会创建新的对象;StringBuilder高效地处理大量字符串拼接,内部可变。
21. **扩展方法**:允许向现有类型添加方法,提高代码的可读性和复用性。
22. **特性**:是元数据,用于标记代码以提供编译时检查、运行时行为的定制等。
23. **应用程序域(AppDomain)**:.NET中执行代码的独立容器,隔离进程内的资源和安全性。
24. **byte变量计算**:bytea += 5 的结果是260,因为byte类型溢出,实际取模256后为1。
25. **const和readonly**:const常量在编译时确定值,不可修改;readonly变量在初始化后不可修改。
26. **代码分析**:题目省略,需要根据具体代码分析。
27. **StringObject数量**:取决于具体的创建方式,如果用了默认构造函数,应为1个。
28. **内存直接操作**:C#不直接操作内存,但可以通过unsafe代码块进行底层操作,需要谨慎使用。
29. **强类型与弱类型**:强类型在编译时检查类型,避免运行时错误;弱类型允许动态类型转换,但可能导致隐式转换的风险。
30. **Math.Round**:Math.Round()方法根据舍入模式对浮点数进行四舍五入,结果取决于第二个参数。
31. **&和&&**:&是位与运算符,&&是逻辑与运算符。
32. **i++和++i**:i++先使用当前值再自增,++i先自增再使用新的值。
33. **as和is**:as用于安全向下转型,is用于检查对象是否为某种类型。
34. **final与finally**:final用于标识方法或变量不可被重写,finally块用于确保资源清理。
35. **成员修饰符**:包括private(私有)、public(公开)、protected(受保护)、internal(内部)等,控制权限。
36. **匿名类**:没有名称的临时类,常用于创建匿名委托。
37. **逐字字符串**:逐字表示字符串中的每个字符,用于精确操作字符序列。
38. **数字格式化转换**:C#提供各种格式化字符串,如"{0:F2}"用于保留两位小数。
39. **字符串拼接与内插法**:使用+运算符或插值语法`$"{variable}"`进行字符串连接。
40. **虚函数与抽象函数**:虚函数是在基类中声明,子类可以重写;抽象函数是声明但未实现的,需要子类提供实现。
以上是对部分C#.NET笔试基础题的详细解析,掌握这些知识点对于理解C#语言特性和准备面试非常重要。