### 129 .NET面试题详解 #### 1. 访问修饰符的理解 - **Private**: 私有成员,仅在定义它的类的内部可见。这意味着只有类的内部方法能够访问这些成员,外部代码无法直接访问。 - **Protected**: 保护成员,允许在当前类及其派生类中访问。这有助于封装,同时允许派生类访问基类的某些成员以实现继承的功能。 - **Public**: 公共成员,没有访问限制,可以在任何地方被访问,包括其他类和程序集。 - **Internal**: 同一命名空间内的可见性,这意味着只要两个类型处于相同的命名空间下,就可以相互访问。这种修饰符通常用于库开发中,允许同一解决方案内的其他部分访问某些成员,但阻止外部应用程序的访问。 #### 2. ASP.NET 页面间传值方法 - **QueryString**: 使用 URL 参数来传递数据。例如,在重定向时可以通过 `response.Redirect("?id=1")` 的形式传递 id 值。 - **Session 变量**: 利用 Session 对象存储全局变量,这种方式适用于跨多个页面甚至整个会话的数据传递。 - **Server.Transfer**: 使用服务器端跳转来传递数据。此方法不会刷新浏览器,也不会改变 URL,适合于后台逻辑处理后需要跳转到另一个页面的情况。 #### 3. 斐波那契数列的递归计算 斐波那契数列定义为 F(n) = F(n-1) + F(n-2),其中 F(1) = F(2) = 1。要计算第 30 个斐波那契数,可以使用递归算法如下: ```csharp public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if (i > 0 && i <= 2) return 1; else return Foo(i - 1) + Foo(i - 2); } } ``` #### 4. C# 中的委托与事件 - **委托**: 是一种引用类型数据,可以存储对函数的引用,并通过该引用调用函数。可以用来将一个方法作为参数传递给另一个方法。 - **事件**: 是基于委托的特殊类型,通常用于对象之间传递消息。事件提供了一种机制,使得当特定情况发生时,一个对象可以通知其他对象(监听者)。 #### 5. Override 与重载的区别 - **重载**: 方法名相同但参数列表不同的多个方法。重载可以帮助提供多种签名供调用者选择,从而更好地适应不同的需求。 - **Override**: 用于继承中,子类重写父类的方法。目的是为了修改或扩展父类的行为,使子类能够提供特定实现。 #### 6. B/S 结构中不使用 Session、Cookie、Application 的变量传递方法 除了上述提到的方法之外,还可以考虑使用 `ViewState` 或 `HiddenField` 控件来传递少量的临时数据。 #### 7. 遍历并清空所有 TextBox 控件的值 ```csharp foreach (System.Windows.Forms.Control control in this.Controls) { if (control is System.Windows.Forms.TextBox) { System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control; tb.Text = String.Empty; } } ``` #### 8. 冒泡排序算法实现 ```csharp int[] array = new int[...]; // 初始化数组 int temp; for (int i = 0; i < array.Length - 1; i++) { for (int j = i + 1; j < array.Length; j++) { if (array[j] < array[i]) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } ``` #### 9. C# 中索引器的实现过程 索引器允许类或结构像数组一样通过索引访问其成员。索引器可以接受任何类型的参数作为索引,不仅限于整数。实现索引器的基本步骤是在类或结构中定义类似于属性的方法,但使用方括号 `[ ]` 替换 `get` 和 `set` 关键字。 #### 10. 表达式计算 根据提供的代码示例,可以推断出该段代码旨在计算一个数值序列的累加和,其中正负号交替出现。虽然代码存在语法错误(如 `+m` 和 `Sum=Sum-I`),但基本思路是正确的。 #### 11. .NET 中 B/S 结构的分层设计 - **三层架构**: 数据访问层、业务逻辑层和表示层。 - **数据访问层** (Data Access Layer): 负责与数据库的交互,执行 CRUD 操作。 - **业务逻辑层** (Business Logic Layer): 包含业务逻辑处理,可以进一步细分为业务规则层和业务表观层。 - **表示层** (Presentation Layer): 用户界面,负责与用户的交互。 - **优点**: - 易于维护和扩展。 - 提高代码复用性和模块化程度。 - **缺点**: - 增加了系统的复杂性和开发成本。 #### 12. 类 A 和 B 的构造函数输出 对于 `new B()` 的实例化操作,将会输出 `x=1, y=-1`。这是因为 `B` 类中 `y` 的初始值为 `-1`,而 `x` 的初始值为 `1`。 #### 13. 应用程序域概念 应用程序域是 .NET 运行时环境中的一个隔离单元。它提供了一个比进程更轻量级的隔离级别,用于加载程序集、管理资源和确保安全性。 #### 14. CTS、CLS、CLR 解释 - **CTS** (Common Type System): 共同类型系统,为 .NET 程序集定义了一组类型规范。 - **CLS** (Common Language Specification): 共同语言规范,定义了一组所有 .NET 语言都必须支持的类型和功能。 - **CLR** (Common Language Runtime): 共同语言运行时,提供了 .NET 程序的基础执行环境和服务,如垃圾回收、类型安全和异常处理等。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助