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 

 get

  return TheMonth; 
 } 
 set { 
  TheMonth =
value; 
 } 
}

  简单通过属性就可以使你的所有数据元素私有化。

  3. 在Producer/Consumer 的Idiom中使用Delegate

  当你生成一个实现producer
idiom类的时候,使用deletate来通知consumer。这种方法相对于用接口更加灵活。Delegate是多点传送的,所以不用加额外的代码你就何以支持多用户。相对于用接口这样做可使类之间的耦合性降低。

  下面的类处理键盘输入并把它传给所有的registered listeners:

public class KeyboardProcessor 

private OnGetLine theFunc
= null;

public OnGetLine OnGetLineCallback { 
 get { 
  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。

  4. 注意初始化顺序

  C#中对于一些变量声明加入了initializer的概念。它们在构造函数之前被执行,实际上变量在基类的构造函数执行前之前被初始化。

  所以,在初始化变量的时候不要用基类中的数据,因为它们还没有被构造。

C#的四个基本技巧,布布扣,bubuko.com

时间: 2024-08-11 07:48:28

C#的四个基本技巧的相关文章

MathType使用中的四个小技巧

MathType是一种比较常见的数学公式编辑器,常常与office搭配着使用,我们在使用的时候有一些要注意的小技巧,下面我们就来给大家介绍介绍MathType使用中的四个小技巧? 技巧一:调整工具栏显示比例 使用场景:头昏眼花总觉得看不清的MathType工具栏符号模板的时候就可以将显示比例调整得大一点,方便一眼就看到各种符号和模板. 操作过程: 1.打开MathType编辑窗口,选择“预置”——“工作区预置”. 2.在弹出的对话框中,在“工具栏大小”一项根据需要选择“中”或者“大”,点击“确定

Android最佳性能实践(四)——布局优化技巧

在前面几篇文章当中,我们学习了如何通过合理管理内存,以及高性能编码技巧的方式来提升应用程序的性能.然而实际上界面布局也会对应用程序的性能产生比较大的影响,如果布局写得糟糕的话,那么程序加载UI的速度就会非常慢,从而造成不好的用户体验.那么本篇文章我们就来学习一下,如何通过优化布局来提供应用程序的性能.还没有看过前面前面一篇文章的朋友建议可以先去阅读 Android最佳性能实践(三)——高性能编码优化 . 重用布局文件 Android系统中已经提供了非常多好用的控件,这让我们在编写布局的时候可以很

第四章python技巧

1.拷贝:深拷贝和浅拷贝 目的:需要一个对象,但又确保原对象不被改变. 深拷贝方法: copy.deepcopy 浅拷贝方法: 1.内置方法 (list, dict,set)  t(o),  (字典本身还有d.copy()) 2. copy.copy (对类型和类很好用) 区别: list1 = [   ['a'],[1,2],['z',23]  ] 原始列表 list2 = list 1 赋值引用 list3 = copy.copy(list1) 浅拷贝 list 4 = copy. deep

《Python CookBook2》 第四章 Python技巧 - 若列表中某元素存在则返回之 &amp;&amp; 在无须共享引用的条件下创建列表的列表

若列表中某元素存在则返回之 任务: 你有一个列表L,还有一个索引号i,若i是有效索引时,返回L[i],若不是,则返回默认值v 解决方案: 列表支持双向索引,所以i可以为负数 >>> def list_get(L,i,v=None): if -len(L)<= i < len(L): return L[i] else: return v >>> list_get([1,2,3,4,5,6],3) 4 异常机制 >>> def list2_ge

Python多版本情况下四种快速进入交互式命令行的操作技巧

因为工作需求或者学习需要等原因,部分小伙伴的电脑中同时安装了Python2和Python3,相信在Python多版本的切换中常常会遇到Python傻傻分不清楚的情况,今天小编整理了四个操作技巧,以帮助大家解决这个"心头之痛". 1.直接在命令行窗口中输入命令"python",便可以进入命令行了,如下图所示. 不过此时默认弹出的是Python2版本,这是因为小编的电脑中Python的环境变量将Python2放在了Python3的前面,所以默认是弹出Python2版本.

移动端样式小技巧

平时在移动端开发拼页面的过程中总会遇到一些问题,主要是各手机webview样式显示效果不一致造成的.以下总结了一些常见坑和一些小技巧,希望对看官有所帮助! 本文只针对两大手机阵营 Android和IOS 中的魅蓝metal 和 iPhone6进行样式对比. 一.line-height line-height经常用于文字居中,当然也有小伙伴会用上下padding去写.but!不管你用padding还是line-height,不同手机显示效果还是-不一样. 一般会这样写 .demo{ height:

reaver 使用方法和技巧

reaver非常的不错,为我们ceng网带了最大的方便,使用简单,我来讲一下自己使用心得吧! 第一步,如果用虚拟机用vmware的,总会出现鼠标不灵点不到地方,换了一个 6.0.2 build-59824 版本后,鼠标变的非常的好用.但是自己还是想用新版,所以在网上看到说是选择linux系统就可以,自己就打开--编辑虚拟机设置---选项---虚拟名称---linux---ubuntu,试了一下鼠标问题就解决了. 第二步,是选择适合你的网卡linux系统, 1.现在有xiaopan 0.3.5对

那些必须掌握的淘宝客服技巧

当我们把星货源店铺做好优化之后,有流量进来了,但是却促进不了成交,这该怎么办?其实成交的问题原因不仅仅是在装修上,而且出现在客服身上.现在很多小卖家都是自己一个人在运营店铺,同时兼顾客服的工作,所以说掌握一些淘宝客服技巧也是非常有必要的. 接下来简单得从四个小技巧进行剖析: 一.缩短时间 在回答买家问题的时候,并不是简单的表面回答,要深入到买家心里,换个角度,你作为买家问这个问题的意思,顾虑疑问是什么,特别是当多位买家发出相同疑问的时候,应该找出问题的背后原因,以免一而再再而三遇到相似的问题浪费

Linux命令总结

总结 1.权限管理-----------    @1.用户权限管理 chown : 设置用户属组属主 chown   属主:属组 chown   :属组   文件 chgrp  :设置用户属组 chgrp    属组   文件    @2.文件权限管理 chmod命令用来改变许可权限.读取.写入和执行是许可权限中的三个主要设置. chmod: 设置文件的读.写.执行 r-文件可以被读取 w-文件可以被写入 x-文件可以被执行,如果文件是程序的话 可以使用带有-l的ls命令来仔细查看一个文件的许多