这些资料是我学习的时候在网络上寻找到的,发布出来希望对大家有帮助,一起努力前进,嘿嘿......Microsoft C#规范 2.0 版 GFC用户提交

feedsky 抓虾 pageflakes google reader my yahoo bloglines 鲜果 有道 http://wap.feedsky.com/bliplink

AttributeUsageAttribute

using System;
using System.Reflection;

//第一步:定义属性类。

//AttributeUsage属性向编译器指出自定义属性的合法应用范围。
//所有编译器都内建对这个属性的支持,并会在用户自定义属性应用于一个无效目标的时候报告错误。

//定义您自己的特性类时,可通过在特性类上放置 AttributeUsageAttribute 来控制特性类的使用方式。指示的特性类必须直接或间接地从 Attribute 派生。
//
//特性类具有定位参数和命名参数。特性类的每个公共构造函数为该类定义一个有效的定位参数序列。命名参数则由特性类的非静态、公共和读写字段或属性定义。
//
//通过定义以下参数设置 AttributeUsageAttribute 的三个属性:
//
//ValidOn
//该定位参数指定可在其上放置所指示的特性的程序元素。AttributeTargets 枚举数中列出了可在其上放置特性的所有可能元素的集合。
//可通过按位“或”运算组合多个 AttributeTargets 值,以获取所需的有效程序元素组合。默认值为 All。
//
//AllowMultiple
//该命名参数指定能否为给定的程序元素多次指定所指示的特性,
//如果允许指定多个实例,则为 true;否则为 false。默认值为 false,属性就只能向一个选定的属性目标应用一次。
//
//Inherited
//该命名参数指定所指示的属性能否由派生类和重写成员继承。
//如果该属性可由派生类和重写成员继承,则为 true,否则为 false。默认值为 true。
//可继承属性不会造成在托管模块中为派生类型生成额外的元数据。

//定义自己的属性类时,未应用一个AttributeUsageAttribute属性,编译器和CLR会认为该属性能应用与所有目标,
//向每个目标都只能应用一次,而且是可继承的。
//这些假定模拟了AttributeUsageAttribute类中的默任字段值

 


//AttributeUsage属性类的FCL源代码:

[Serializable]
[AttributeUsageAttribute(AttributeTargets.Class,Inherited = true)]
public sealed class AttributeUsageAttribute : Attribute
{
 internal static AttributeUsageAttribute Default = new AttributeUsageAttribute(AttributeTargets.All);

 internal Boolean m_allowMultiple = false;
 internal AttributeTargets m_attributeTarget = AttributeTargets.All;
 internal Boolean m_inherited = true;

 public AttributeUsageAttribute(AttributeTargets validOn)
 {
  m_attributeTarget = validOn;
 }

 public Boolean AllowMultiple
 {
  get
  {
   return m_allowMultiple;
  }
  set
  {
   m_allowMultiple = value;
  }
 }

 public Boolean Inherited
 {
  get
  {
   return m_inherited;
  }
  set
  {
   m_inherited = value;
  }
 }

 public AttributeTargets ValidOn
 {
  get
  {
   return m_attributeTarget;
  }
 }
}

 

//[Flags]
//[Serializable]
//public enum AttributeTargets
//{
//}

 

//定义属性类的实例构造器、字段和properties 时,合法的数据类型集合限制为:
//Boolean,Char,Byte,Sbyte,Int16,UInt16,Int32,UInt32,Int64,UInt64,Single,Double,String,Type,Object
//或一个枚举类型,还可以使用一个基于零的一维数组。

//[Flags]
[Serializable]
public class MyAttribute
{
 private string name;
 MyAttribute(String name)
 {
  name = name;
 }
}


 


友情链接

郑州大学软件学院 SpringWidgets-Blogger 徵信社 翻译公司 链接帮手网 行驶证字体 酷站目录 Friend Connectified