C#面试题(四)(包含答案)

1. try catch

  • try 用于检查发生的异常,并帮助发送任何可能的异常。
  • catch 以控制权更大的方式处理错误,可以有多个catch子句。
  • finally 无论是否引发了异常,finally的代码块都将被执行。
  • throw 用于引发异常,可引发预定义异常和自定义异常。
try
{
   //有可能发生错误的程序块
}
catch (Exception)
{
   //当发生错误的时候才会执行的代码块
   throw;
}
finally
{ 
   //无论是否发生错误都会执行的代码块
}

写try-catch语句的时候一定要注意以下几点:

  • 尽量给CLR一个明确的异常信息,不要使用Exception去过滤异常
  • 不要轻易将try-catch写在循环中
  • try尽量少的代码,如果有必要可以使用多个catch块,并且将最有可能抛出的异常类型,书写在距离try最近的位置

2.C# 开发相较于其它语言的优势劣势

优点:

  1. 1.C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的编程语言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及不允许多重继承)。
  2. C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。

缺点:

  1. C#不适用于编写时间急迫或性能非常高的代码,例如一个要运行1000或者1050次的循环,并在不需要这些循环时,立即其管理它们所占的资源。
  2. C#缺乏性能极高的应用程序所需要的关键功能,包括保证在所代码的特定地方运行的内联函数和析构函数。但这类应用程序非常少。

3.使用 unsafe 代码

   首先要在 :  项目属性 - 生成选项里 - 勾选允许运行不安全代码

   unsafe可以用来修饰类、类的成员函数、类的全局变量,但不能用来修饰类成员函数内的局部变量

class PointerDemo
{
  public int x, y;
}
class Program
{
  unsafe static void ChangeValue(int* x, int* y)
  {
    *x = 200; //修改所在地址值
    *y = 300;
  }
  unsafe static void Main()
  {
    var obj = new PointerDemo();
    Console.WriteLine("原始值: {0}, {1}", obj.x, obj.y); 
    fixed (int* n = &obj.x)
    {
      fixed (int* p = &obj.y)
      {
        ChangeValue(n, p); //取data地址并传递
      }
    }
    Console.WriteLine("改变地址后: {0}, {1}", obj.x, obj.y); 
    Console.ReadLine(); 
  }
}

4. 反编译工具

   最常用的是Reflector,但是已经收费了,ILSpy好像也不错

参考列表:

 1.C#之Try……Catch实例 : https://blog.csdn.net/djuan15732626157/article/details/50708125

 2.C# 深度剖析try catch finally及其性能影响 : https://blog.csdn.net/u012391923/article/details/53432455

 3. C#基础—不安全代码(unsafe code) : https://www.cnblogs.com/lgx5/p/7353346.html

 4..net反编译的九款神器 : https://www.cnblogs.com/zsuxiong/p/5117465.html

扫描二维码关注公众号,回复: 2710275 查看本文章

猜你喜欢

转载自blog.csdn.net/dengshunhao/article/details/81263951