使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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cdbycd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值