C# 常见面试问题汇总

时间:2021-10-19 21:22:34

1、c#垃圾回收机制

从以下方面入手展开:  1、压缩合并算法   2、代的机制  3、GC调用终结器 Garbage Collector

. NET采用了和Java类似的方法由CLR(Common Language Runtime)来管理 

     .NET的GC机制有这样两个问题:

  首先,GC并不是能释放所有的资源。它不能自动释放非托管资源。

  第二,GC并不是实时性的,这将会造成系统性能上的瓶颈和不确定性。

  GC并不是实时性的,这会造成系统性能上的瓶颈和不确定性。所以有了IDisposable接口,IDisposable接口定义了Dispose方法,这个方法用来供程序员显式调用以释放非托管资源。使用using语句可以简化资源管理。

具体详见:https://www.cnblogs.com/nele/p/5673215.html

2、委托和事件

先说它的定义:委托的本质是类,类型安全的指针,然后从用途上考虑,事件是包装的委托,但事件不是委托。事件是由一个私有委托和add、remove 方法组成。

事件、索引器、属性本质都是方法。接口只可以定义方法。所以接口也可以定义“事件、索引器、属性”,因为他们的本质也是add、remove 方法。

委托是一种可以指向方法的数据类型,可以声明委托类型变量。

     声明委托的方式:delegate返回值类型   委托类型名(参数)

     比如delegate void MyDel(int n) 。C#中默认写了2中委托Action<>,Func<>,Action基本上都是void没有返回值,Func是有返回值的

1 using System.Collections.Generic; 2 using System.Linq; 3 using System.Text; 4 using System.Threading.Tasks; 5 6 namespace TestConsole 7 { 8 delegate void MyDel(); 9 class Program 10 { 11 12 static void Main(string[] args) 13 { 14 person p = new person(); 15 p.QingZhu += ShowMsg; 16 p.age = 24; 17 Console.ReadKey(); 18 } 19 static void ShowMsg() 20 { 21 Console.WriteLine("今年是你的本命年!恭喜你"); 22 } 23 } 24 class person 25 { 26 private int Age; 27 public int age 28 { 29 get 30 { 31 return age; 32 } 33 set 34 { 35 if (value % 12 == 0) 36 { 37 if (QingZhu != null) 38 { 39 QingZhu();//执行事件 40 } 41 } 42 } 43 } 44 public event MyDel QingZhu; 45 } 46 }

View Code

1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Linq; 5 using System.Text; 6 using System.Threading.Tasks; 7 8 namespace TestConsole 9 { 10 delegate void MyDel(); 11 class Program 12 { 13 14 static void Main(string[] args) 15 { 16 person p = new person(); 17 p.qingzhu += ShowMsg; 18 p.age = 24; 19 Console.ReadKey(); 20 } 21 static void ShowMsg() 22 { 23 Console.WriteLine("今年是你的本命年!恭喜你"); 24 } 25 } 26 class person 27 { 28 private int Age; 29 public int age 30 { 31 get 32 { 33 return age; 34 } 35 set 36 { 37 if (value % 12 == 0) 38 { 39 if (this.QingZhu != null) 40 { 41 this.QingZhu();//执行事件 42 } 43 } 44 } 45 } 46 private MyDel QingZhu; 47 public event MyDel qingzhu 48 { 49 add 50 { 51 this.QingZhu += value; 52 } 53 remove 54 { 55 this.QingZhu -= value; 56 } 57 } 58 59 } 60 }

View Code

3、c#索引