• 发布 AutoRssReceiver Console 机器人! 兼讲: .Net 中的 Attribute (特性)


    发布 AutoRssReceiver Console 机器人用于定时自动收取 rss !
    本文同我的这篇 Blog
    .Net/C#: 利用反射编写通用的 rss 2.0 的 reader
    http://www.cnblogs.com/microshaoft/archive/2005/03/27/126669.html

    最大不同就是:
    利用 Attribute (特性) 保存 "类的成员变量" 与 "XML Node" 的映射关系!(Design Time)

    如果要《理解.NET中的Attribute(特性) 》请看:
    http://blog.joycode.com/joe/archive/2004/11/15/38952.aspx
    个人认为评论对实现自定义 Attribute 更有帮助!
    当初我发表的评论:

    我理解为是对 assembly 元数据的拓展!
    可修饰 assembly class method parameter property !
    自定义 Attribute 要结合 Reflection 才能真正实现自己的功能!
    其中
    Obsolete("Will be removed in next version", Reviewed = true)
    "Will be removed in next version" 是符合构造函数签名的参数!
    Reviewed = true : Reviewed 是成员变量!
    Obsolete("Will be removed in next version", Reviewed = true) 就是 Obsolete (Attribute)类的实例

    (当然后面的评论同样精彩)

    意思就是说:
    传统的那些: 修饰符 public private internal static ... 现在不够用了,
    想附加一些自定义的信息来分别修饰 assembly class method parameter property!
    但是要想编程读取这些附加信息,要结合 Reflection 才能实现自己的功能!
    如果: 给类的属性 添加了一个 Attribute 来修饰这个属性!
    我们可以理解为 "属性的(附加自定义的)属性" 就是 Attribute!("属性的属性"就是 Attribute(特性))
    这里的"附加自定义"是指相对于传统的那些修饰符!
    从语法格式上看: 当作"标签"理解,确实也很直观形象!

    下面是例子:
    1.实现一个用于 修饰 "类的成员变量" 的 自定义 Attribute!

        [AttributeUsage(AttributeTargets.Field)]
        
    public class XmlNodeNameAttribute : Attribute
        
    {
            
    private string _Name;

            
    public XmlNodeNameAttribute(string Name)
            
    {
                
    this._Name = Name;
            }


            
    public string Name
            
    {
                
    get
                
    {
                    
    return this._Name;
                }

            }

        }

    2.定义一个类,用 XmlNodeNameAttribute 来修饰 成员变量

        public class RssHeader
        
    {
            
    //运行时该类的"对象实例"的私有 Field 的值将 class SimpleRssReader 中通过反射赋值
            
    //大家看下面标签: XmlNodeNameAttribute("dc:language")
            
    //就是一个 XmlNodeNameAttribute 类的实例
            [XmlNodeNameAttribute("dc:language")] 
            
    private string _dclanguage; //dc:language
        }

    3.编程访问读取 该类 的这些 Attribute

        Type t = typeof (RssHeader);
        
    //Type t = typeof (RssItem);
        Hashtable ht = new Hashtable();
        FieldInfo[] fis 
    = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
        
    foreach (FieldInfo fi in fis)
        
    {
            
    object[] attributes = fi.GetCustomAttributes(false);
            
    if (attributes.Length > 0)
            
    {
                
    foreach (XmlNodeNameAttribute a in attributes)
                
    {
                    
    if (a != null)
                    
    {
                        ht.Add(a.Name, fi.Name);
                    }

                }

            }

        }


    完整代码在这里下载:
    https://files.cnblogs.com/Microshaoft/AutoRssReceiver.rar

  • 相关阅读:
    JDBC(三)、基础代码及优化
    JDBC(二)、注册驱动三种实现原理
    JDBC(一)、数据库存取的三种
    Java学习笔记(四) 运算符
    Java学习笔记(三) 基础语法
    Java学习笔记(二) 第一个程序
    Java学习笔记(一) Java 概述
    JqGrid自定义获取编辑中单元格的值
    移动前端开发之viewport的深入理解
    CSS学习笔记--提示工具(Tooltip)
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/134722.html
Copyright © 2020-2023  润新知