• 使C#语言编程更加高效的伎俩


    1. 介入或许尽管使用接口来编程
      .NET框架包罗类和接口.当你写程序的时辰,你或许懂得你正在用.NET的哪个类.但是,在这类状况下介入你用.NET撑持的接口而不是它的类来编程时,你的代码会变得更加不乱、可用性会更高.请解析下面的代码:
      private void LoadList (object [] items,
      ListBox l)
      {
      for (int i = 0;i < items.Length;i++)
      l.Items.Add (items[i].ToString ());
      }
      那个函数从一个可为任何对象的数组中加载ListBox.这段代码被限定为只能使用数组.假想过些时辰你发觉那些对象存在信息库中,或不的集合中.那么你需要修改程序来使用差不的集合类型.介入你用ICollection接口来写那段程序,你就不必修改那段程序啦,对于任何实现ICollection接口的类型它都能非常好的任务:private void LoadList (ICollection items,
      ListBox l)
      {
      foreach (object o in items)
      l.Items.Add (o.ToString ());
      }
      ICollection被数组和全部System.Collection中的集合实现.另外,多维数组也撑持ICollection接口.介入那还不够的话,信息库.NET类同样撑持ICollection接口.用接口写的那个函数不必须改就能才非常多中状况下使用.
      2,使用属性代替原始信息
      因为属性差不多成为语言自已的元素,所以表明信息元素时它的作用域品级没有需要大于private.因为代码自已会把属性看成信息元素,你同时没有落空使用简单信息类型的便当性 .相反它会使你的代码更加机动功能更减少盛.属性使你的信息元素封装性更好.属性可以让你使用lazy evaluation来返回信息.lazy evaluation的意思是当用户要求时才统计它的值,而不是一贯保留着它.
      末啦,属性可所以 virtual也可所以 abstract.你也能够在接口中定义属性.
      那个地点还有维护角度的身分该当看重:尽管操纵两者的方式是同样的,但是你把一个信息元素变成属性,那么原先客户端的程序便不能会晤服务端的新版本程序了.事实上对于在Web service中你想实现序列化的值你可以把它们变成属性来使用:private int TheMonth = 0;
      [XmlAttribute (“Month”)]
      public int Month
      {
      gain {
      return TheMonth;
      }
      set {
      TheMonth = value;
      }
      }
      简单通过属性就能使你的全部信息元素私有化.
      3,在ProducerConsumer的Idiom中使用Delegate
      当你生成一个实现producer idiom类的时辰,使用deletate来关照consumer.这类方式相对于用接口更加机动.Delegate是多点传送的,所以不必加分外的代码你就何以撑持多用户.相对于用接口似许做可使类之间的耦合性下降.下面的类操纵键盘输入同时把它传给全部的registered listeners:public class KeyboardProcessor
      {
      private OnGetLine theFunc = null;
      public OnGetLine OnGetLineCallback {
      gain {
      return theFunc;
      }
      set {
      theFunc = value;
      }
      }
      public void Run (){
      Read input.
      If there is any listeners,publish:
      string s;
      do {
      s = Console.ReadLine ();
      if (s.Length == 0)
      break;
      if (theFunc != null){
      System.Delegate [] funcs =
      theFunc.GetInvocationList();
      foreach (OnGetLine f in funcs) {
      try {
      f (s);
      } catch (Exception e) {
      Console.WriteLine
      (“Caught Exception:{0}”,
      e.Message);
      }
      }
      }
      } while (true);
      }
      任何数妄图listeners都可注册到producer,它们所要做的只是供应一个特定的函数:deletate.
  • 相关阅读:
    mysql 物理备份及恢复
    Springboot通过Filter过滤HttpServletRequest和HttpServletResponse的数据作为日志并通过@Async异步入库
    基于springboot的论坛网站
    独立成分分析ICA/FastICA
    springboot基于微信小程序的选课系统毕业设计源码060000
    zabbix
    Axure RP 基本小工具 线条和箭头使用教程
    LIN通讯
    分析图片相似度的软件,图片相似度比对算法
    Android Gradle 学习笔记(二)环境安装
  • 原文地址:https://blog.csdn.net/mestyles/article/details/127934367