反射特性(Attribute)

来源:互联网 发布:办公表格软件excel 编辑:程序博客网 时间:2024/06/16 04:11

原文链接

可能很多人还不了解特性,所以我们先了解一下什么是特性。想想看如果有一个消息系统,它存在这样一个方法,用来将一则短消息发送给某人:

// title: 标题;author:作者;content:内容;receiverId:接受者Idpublic bool SendMsg(string title, string author, string content, int receiverId){// Do Send Action}
我们很快就发现这样将参数一个个罗列到方法的参数列表中扩展性很糟糕,我们最好定义一个Message类将短消息封装起来,然后给方法传递一个Message对象:

public class Message{  private string title;  private string author;  private string content;  private int receiverId;  // 略}public bool SendMsg(Messag msg){// Do some Action}
       此时,我们或许应该将旧的方法删除,用这个扩展性更好的SendMsg方法来取代。遗憾的是我们往往不能,因为这组程序可能作为一组API发布,在很多客户程序中已经在使用旧版本的SendMsg()方法,如果我们在更新程序的时候简单地删除掉旧的SendMsg()方法,那么将造成使用老版本SendMsg()方法的客户程序不能工作。

      这个时候,我们该如果做呢?我们当然可以通过方法重载来完成,这样就不用删除旧的SendMsg()方法了。但是如果新的SendMsg()不仅优化了参数的传递,并且在算法和效率上也进行了全面的优化,那么我们将会迫切希望告知客户程序现在有一个全新的高性能SendMsg()方法可供使用,但此时客户程序并不知道已经存在一个新的SendMsg方法,我们又该如何做呢?我们可以打电话告诉维护客户程序的程序员,或者发电子邮件给他,但这样显然不够方便,最好有一种办法能让他一编译项目,只要存在对旧版本SendMsg()方法的调用,就会被编译器告知。



0 0
原创粉丝点击