本文不是入门文章,不会从最简单的什么是委托和事件开始.只是稍稍深入学习下委托和事件,作为记录.

目录:

   单例模板文件

     委托

     事件

     个人使用习惯

    先说两个蛮经典的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 }
Singlelet.cs

相关文章: