本文不是入门文章,不会从最简单的什么是委托和事件开始.只是稍稍深入学习下委托和事件,作为记录.
目录:
先说两个蛮经典的C#面试题.
1.定义一种过滤器,比如在一个整形集合找到满足定义的子集
要求:
a.定义可以扩展,比如取出偶数,或者取出奇数,或者取出除3余1的数.
b.最好可以满足泛型需要,集合也可以变为其他类型
2.喵叫老鼠跑,主人醒.
要求:
a.要有联动性,老鼠和人的行为是被动的
b.考虑可扩展行,猫叫声可能会引起其他联动效应
问题1可以拿模板方法来实现,问题2可以拿观察者来实现,不过那都已经OUT了,用C#的完全可以不去记什么是观察者模式[delegate],C#原生支持.
顺便吐槽下在C#中学习设计模式.
C#原生支持的设计模式还有迭代器模式[foreach].
模板方法[每种OO语言都支持,C#当然支持].
像解释器这种基本上用不上的设计模式,也不用去学.
单例模式基本上就是个类模板,新建选择一下就OK了,基本上密封静态初始化就行,密封使用初始化,单锁,双锁,延迟初始化什么的基本都是浮云.
单例在C#里面有6中实现(还有一种是使用内置的线程锁),都差不多,只不过适用场合不一样,但是密封静态初始化这种可以满足98%的需求.
共享下模板文件Singlelet.cs和Singlelet.vstemplate
1 using System; 2 3 namespace $rootnamespace$ 4 { 5 public sealed class $safeitemrootname$ 6 { 7 /// <summary> 8 /// 构造函数私有化,防止外部初始化 9 /// </summary> 10 private $safeitemrootname$(){} 11 /// <summary> 12 /// 内部唯一实例 13 /// </summary> 14 private static $safeitemrootname$ instance=new $safeitemrootname$(); 15 /// <summary> 16 /// 获取单例 17 /// </summary> 18 public static $safeitemrootname$ Instance 19 { 20 get 21 { 22 return instance; 23 } 24 } 25 } 26 }