发布 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!
public class XmlNodeNameAttribute : Attribute
{
private string _Name;
public XmlNodeNameAttribute(string Name)
{
this._Name = Name;
}
public string Name
{
get
{
return this._Name;
}
}
}
2.定义一个类,用 XmlNodeNameAttribute 来修饰 成员变量
{
//运行时该类的"对象实例"的私有 Field 的值将 class SimpleRssReader 中通过反射赋值
//大家看下面标签: XmlNodeNameAttribute("dc:language")
//就是一个 XmlNodeNameAttribute 类的实例
[XmlNodeNameAttribute("dc:language")]
private string _dclanguage; //dc:language
}
3.编程访问读取 该类 的这些 Attribute
//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