C#学习基础概念二十五问(3)
来源:互联网 发布:什么网游支持mac 编辑:程序博客网 时间:2024/06/05 22:58
19.别名指示符是什么?
答:
通过别名指示符我们可以为某个类型起一个别名
主要用于解决两个命名空间内有同名类型的冲突或避免使用冗余的命名空间
别名指示符只在一个单元文件内起作用
示例:
11
13
14
15
16}
17Class2.cs
18
19using
25
27
29
30
31
32}
33主单元(Program.cs):
34
35using
40using
45
47
49
57
58}
59结果:
60com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib01's
61com.nblogs.reonlyrun.CSharp26QExample.Example19.Lib02's
62
63
65
20.如何释放非托管资源?
答:
最简单的办法,可以通过实现protected voidFinalize()(析构函数会在编译时变成这个东东)来释放非托管资源,因为GC在释放对象时会检查该对象是否实现了Finalize() 方法,如果是则调用它。但,据说这样会降低效率。。。
有一种更好的,那就是通过实现一个接口显式的提供给客户调用端手工释放对象的方法,而不是傻傻的等着GC来释放我们的对象(何况效率又那么低)
System 命名空间内有一个 IDisposable 接口,拿来做这事非常合适,就省得我们自己再声明一个接口了
另外补充一句,这种实现并不一定要使用了非托管资源后才用,如果你设计的类会在运行时有大些的实例(象 GIS中的Geometry),为了优化程序性能,你也可以通过实现该接口让客户调用端在确认不需要这些对象时手工释放它们
示例:
11
12
13
14
15
16
18
20
21
22
24
26
27
28
30
32
35
36
38
39
40
42
44
45
48
49
50
53
54}
55
56
21.P/Invoke是什么?
答:
在受控代码与非受控代码进行交互时会产生一个事务(transition) ,这通常发生在使用平台调用服务(PlatformInvocation Services),即P/Invoke
如调用系统的 API 或与 COM 对象打交道,通过 System.Runtime.InteropServices命名空间
虽然使用 Interop 非常方便,但据估计每次调用事务都要执行 10 到 40条指令,算起来开销也不少,所以我们要尽量少调用事务
如果非用不可,建议本着一次调用执行多个动作,而不是多次调用每次只执行少量动作的原则
22.StringBuilder 和 String 的区别?
答:
String 虽然是一个引用类型,但在赋值操作时会产生一个新的对象,而 StringBuilder 则不会
所以在大量字符串拼接或频繁对某一字符串进行操作时最好使用 StringBuilder,不要使用 String
示例:
11
12
15
16
21
23
28
29}
30结果:
31String:
34
23.explicit 和 implicit 的含义?
答:
explicit 和 implicit 属于转换运算符,如用这两者可以让我们自定义的类型支持相互交换
explicti 表示显式转换,如从 A -> B 必须进行强制类型转换(B =(B)A)
implicit 表示隐式转换,如从 B -> A 只需直接赋值(A = B)
隐式转换可以让我们的代码看上去更漂亮、更简洁易懂,所以最好多使用 implicit运算符。不过!如果对象本身在转换时会损失一些信息(如精度),那么我们只能使用 explicit运算符,以便在编译期就能警告客户调用端
示例:
10
12
15
17
19
20
21
22
24
27
29
31
32
33
34
36
37
38
42
43
48
49}
50结果:
51紫霞仙子:神仙变妖怪?偷偷下凡即可。。。
52孙悟空:妖怪想当神仙?再去修炼五百年!
54
24.params 有什么用?
答:
params 关键字在方法成员的参数列表中使用,为该方法提供了参数个数可变的能力
它在只能出现一次并且不能在其后再有参数定义,之前可以
示例:
10
11
13
15
16
18
19
22
23
24
25
26
29
30}
31结果:
321
33a
34b
35c
362
37d
38100
3933.33
40System.Double[]
42
25.什么是反射?
答:
反射,Reflection,通过它我们可以在运行时获得各种信息,如程序集、模块、类型、字段、属性、方法和事件
通过对类型动态实例化后,还可以对其执行操作
一般用于插件式框架程序和设计模式的实现,当然反射是一种手段可以充分发挥其能量来完成你想做的任何事情(前面好象见过一位高人用反射调用一个官方类库中未说明的函数。。。)
示例:
13
14
16
17
19
22
24
26
28
30
32
34
35}
36
反射实例化对象并调用其方法,属性和事件的反射调用略去
10
12
14
15
16
18
21
22
25
26
28
29
30
32
33
34
35
36
38
42
44
45
47
48
49
51
52
53
54
55
56
57
58
59
61
63
65
66
69
70}
71结果:
72Name:
73Name:
75
- C#学习基础概念二十五问(3)
- C#学习基础概念二十五问(2)
- C#基础概念二十五问[转]
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问
- C#基础概念二十五问 (转载)
- C#基础概念二十五问
- C#基础概念二十五问[上篇]
- C#基础概念二十五问 [下篇]
- C#基础概念二十五问
- C#基础概念二十五问
- C语言字符及字符串处理函数
- 倒排索引-搜索引擎的基石
- poj——1985——Cow Marathon
- html中lazyload的实现。
- C#学习基础概念二十五问(2)
- C#学习基础概念二十五问(3)
- 学习思考 耐得寂寞 拥得繁华 (转)
- 反垃圾邮件网关 需关闭邮件中继开启SMTP认证
- 关于#include<iomanip> 中iomanip的作用
- 转:学C++的50条建议
- 古老印度的故事
- SqlDataAdapter和DataSet
- 常用正则表达式(一)
- 常用正则表达式(二)