### C# 和 .NET 130 道面试题详解 #### 1. 访问修饰符 private、protected、public、internal 的访问权限 - **private**: 私有成员,仅在定义它的类的内部可见。外部无法访问这些成员。 - **protected**: 保护成员,可以在定义它的类内部及其派生类中访问。这使得基类中的某些部分可以在派生类中被修改或使用,但对外部仍然是不可见的。 - **public**: 公共成员,没有任何访问限制,可以在任何地方被访问。 - **internal**: 只有在同一个命名空间内的代码才能访问这些成员。这对于同一项目的多个类库之间的资源共享很有用。 #### 2. ASP.NET 页面间传递值的方式 - **使用 QueryString**: 通过 URL 的查询字符串传递值,如 `?id=1`。这种方式简单易用,但安全性较差。 - **使用 Session 变量**: 存储用户特定的数据,在整个会话期间可用。适用于需要跨多个页面保持状态的情况。 - **使用 Server.Transfer**: 将请求直接转移到服务器上的另一个页面,不经过客户端。此方法不会改变浏览器地址栏的内容,可用于快速转移用户到另一个页面而无需额外的网络往返。 #### 3. 斐波那契数列第 30 项的递归实现 斐波那契数列定义为前两个数的和等于其后的一个数,即 `F(n) = F(n-1) + F(n-2)`,其中 `F(1) = F(2) = 1`。 ```csharp public class Fibonacci { public static void Main() { Console.WriteLine(FibonacciNumber(30)); } public static int FibonacciNumber(int n) { if (n <= 0) return 0; else if (n == 1 || n == 2) return 1; else return FibonacciNumber(n - 1) + FibonacciNumber(n - 2); } } ``` #### 4. 委托与事件 - **委托**: 是一种引用类型,可以存储方法的引用,并且可以通过这个引用来调用相应的方法。 - **事件**: 是一种特殊的委托,通常用于通知订阅者某件事情的发生。事件是委托的一种特定用途。 #### 5. override 与重载的区别 - **重载**: 在同一个类中定义多个同名方法,但参数列表不同(数量、类型或顺序不同),编译器通过参数的不同来决定调用哪个方法。 - **override**: 用于派生类中覆盖基类的虚方法,以提供新的实现。这使得派生类可以改变或扩展基类的行为。 #### 6. B/S 结构系统中传递变量值的替代方法 除了使用 Session、Cookie 或 Application,还可以考虑使用: - **URL 参数**: 通过 URL 传递简单的变量值。 - **HTTP Headers**: 使用 HTTP 请求头传递信息。 - **HTML 表单**: 使用 HTML 表单提交数据。 - **JavaScript Local Storage**: 临时存储少量数据,供后续页面使用。 #### 7. 编程遍历页面上所有 TextBox 控件并清空文本 ```csharp foreach (Control control in this.Controls) { if (control is TextBox) { TextBox tb = (TextBox)control; tb.Text = string.Empty; } } ``` #### 8. 冒泡排序算法 ```csharp int[] array = new int[] { /* 初始化数组 */ }; for (int i = 0; i < array.Length - 1; i++) { for (int j = 0; j < array.Length - 1 - i; j++) { if (array[j] > array[j + 1]) { int temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } ``` #### 9. C# 中索引器的实现 索引器允许类或结构通过索引来访问其成员,类似于数组。实现索引器不需要使用数字,可以使用任何类型的键。 ```csharp public class MyCollection { private Dictionary<string, int> items = new Dictionary<string, int>(); public int this[string key] { get { return items[key]; } set { items[key] = value; } } } ``` #### 10. 求表达式 1-2+3-4+…+m 的值 ```csharp int m = Convert.ToInt32(this.TextBox1.Text); int sum = 0; for (int i = 1; i <= m; i++) { if (i % 2 == 0) { sum -= i; } else { sum += i; } } Console.WriteLine(sum.ToString()); Console.ReadLine(); ``` #### 11. 分层架构设计 - **三层架构**: 数据访问层 (DAL)、业务逻辑层 (BLL)、表示层 (UI)。 - **数据访问层**: 负责与数据库交互,执行 CRUD 操作。 - **业务逻辑层**: 包含业务规则和流程,确保数据的有效性和一致性。 - **表示层**: 提供用户界面,负责接收用户输入和显示结果。 这种分层结构提高了系统的可维护性和可扩展性,但也可能增加了开发成本。 #### 12. 代码示例输出 给定代码示例创建 `B` 类的实例时,输出将是 `x=1, y=-1`。这是因为 `B` 类的构造函数将 `y` 设置为 `-1`,而 `x` 的默认值为 `1`。 #### 13. 应用程序域的概念 应用程序域 (AppDomain) 是 .NET Framework 中的一个概念,类似于 Java 的 ClassLoader。它可以被视为进程中的一个隔离环境,每个应用程序域都有自己的类加载器和配置设置。这种机制有助于提高应用程序的安全性和稳定性,因为一个应用程序域中的故障不会影响其他应用程序域。
- 粉丝: 1
- 资源: 28
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
- (源码)基于Java和MySQL的学生信息管理系统.zip
- (源码)基于ASP.NET Core的零售供应链管理系统.zip
- (源码)基于PythonSpleeter的戏曲音频处理系统.zip