C# 常见面试问题汇总
2021-01-30 07:12
标签:func user 需要 HERE master 简化 -668 return play 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是有返回值的 3、c#索引 索引可以是字符串类型的,可以允许有多个索引参数,下面的方法我就可以定义多个参数。常见的Dictory 4、装箱和拆箱 值类型和引用类型之间的转换。频繁装箱和拆箱会导致系统性能降低,可考虑用泛型。值类型赋值给object为装箱操作,值类型赋值给object拆箱(显示转换)。装什么类型拆箱就是什么类型,除非C#中convert.toInt32 等内置的这些方法可以强制拆箱。 5、泛型 考得不多,但我们平常用的比较多。所以对泛型的一些东西需要了解,如泛型约束等。 泛型约束 public void GetEntity where T :struct //约束T必须为值类型 6、c#如何调用c++ 的dll?为什么可以调用 右击添加类中的“TypeLib中的MFC类”选项实现跨平台调用。添加好后会生成h文件和cpp文件 填写完后Function.h文件会报错,错误类型如下。这里需要在C++项目里面设置,让动态库受到公共语言运行时的支持。如下图所示:打开项目属性 C#和C++在vs中的语法类型都会编译成CTS(Common Type System通用数据类型)生成.net 中有CLS(Common Language Specification公共语言允规范) 并在IL代码中的CLR(Common Language Runtime 公共语言运行池)中运行。 Int和Int32,string与String的区别,一个是C#代码中的类型,一个是IL中的CTS通用数据类型 C# 常见面试问题汇总 标签:func user 需要 HERE master 简化 -668 return play 原文地址:https://www.cnblogs.com/whitebai/p/11668972.html 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 }
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 }
1 class MyIntIndex
2 {
3 private static string[] name = { "dandan", "chizi", "jianguo" };
4 public string this[int index]
5 {
6 get
7 {
8 string n = name[index];
9 return n;
10 }
11 set
12 {
13 name[index] = value;
14 }
15 }
16 }
17 }
where K : class //约束K必须为引用类型
where V : IComparable //约束V必须是实现了IComparable接口
where W : K //要求W必须是K类型,或者K类型的子类
where X :class ,new () // 或者写出 new class() ; X必须是引用类型,并且要有一个无参的构造函数(对于一个类型有多有约束,中间用逗号隔开)
上一篇:HTML学习2
下一篇:C#中关于CSV文件的写入和读取