前往顾页
以后地位: 主页 > 收集编程 > .Net实例教程 >

C#的四个根基技能概述

时候:2011-04-08 14:49来源:知行网www.zhixing123.cn 编辑:麦田守望者

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的观点。它们在机关函数之前被履行,实际上变量在基类的机关函数履行前之前被初始化。

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

 

------分开线----------------------------
标签(Tag):C# C#实例教程 C#源代码
------分开线----------------------------
保举内容
猜你感兴趣