C# 反射通过GetCustomAttributes方法,获得自定义特性
来源:互联网 发布:逆战游戏数据异常 编辑:程序博客网 时间:2024/06/03 17:37
使用反射访问: 自定义属性的信息和对其进行操作的方法。
一、实例1
1、代码:
如:System.Attribute[] attrs=System.Attribute.GetCustomAttributes(typeof(FirstClass));
namespace ConsoleApplication1{ class Program { static void Main(string[] args) { PrintAuthorInfo(typeof(FirstClass)); PrintAuthorInfo(typeof(SecondClass)); PrintAuthorInfo(typeof(ThirdClass)); Console.ReadKey(); } private static void PrintAuthorInfo(System.Type t) { System.Console.WriteLine("\n类型的 System.Type 对象是:{0}", t); System.Attribute[] attrs = System.Attribute.GetCustomAttributes(t); //反射获得用户自定义属性 foreach (System.Attribute attr in attrs) { if (attr is Author) { Author a = (Author)attr; System.Console.WriteLine(" 名称:{0}, 版本: {1:f}", a.GetName(), a.version); } } } } [System.AttributeUsage(System.AttributeTargets.Class | System.AttributeTargets.Struct, AllowMultiple = true) ]//自定义特性类(应用特性的程序元素(是类或结构),程序元素可以指定多个特性) public class Author : System.Attribute { string name; public double version; public Author(string name) { this.name = name; version = 1.0; // Default value } public string GetName() { return name; } } [Author("H. Ackerman")] public class FirstClass { // ... } // No Author attribute public class SecondClass { // ... } [Author("H. Ackerman"), Author("M. Knott", version = 2.0)] public class ThirdClass { //程序元素可以指定多个特性 }}
2、效果:
二、实例2
1、代码
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Linq.Expressions;using System.Collections.Specialized;using System.Reflection;using System.Data.Linq.Mapping;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { PropertyInfo[] propertys = typeof(FirstClass).GetProperties();//返回FirstClass的所有公共属性 if (propertys != null && propertys.Length > 0) { foreach (PropertyInfo p in propertys) { object[] objAttrs = p.GetCustomAttributes(typeof(ColumnAttribute), true);//获取自定义特性 //GetCustomAttributes(要搜索的特性类型,是否搜索该成员的继承链以查找这些特性) if (objAttrs != null && objAttrs.Length > 0) { ColumnAttribute attr = objAttrs[0] as ColumnAttribute; Console.WriteLine("自定义特性Name:"+p.Name+", 元数据:"+attr); } }; } Console.ReadKey(); } } public class FirstClass { private int _newsid = 0; /// <summary> /// 主键 /// </summary> [Column(Name = "NewsId", DbType = "int", IsPrimaryKey = true, CanBeNull = false, IsDbGenerated = true)] public int NewsId { get { return this._newsid; } set { this._newsid = value; } } private string _newsimage = string.Empty; /// <summary> /// 资讯标题图片 /// </summary> [Column(Name = "NewsImage", DbType = "varchar", IsPrimaryKey = false, CanBeNull = false, IsDbGenerated = false)] public string NewsImage { get { return this._newsimage; } set { this._newsimage = value; } } }}
2、效果
其他:
FullName(获得System.Type的完全限定名,包括命名空间)
三、实例3 (设置指定实例 属性 的值)
FirstClass fClass = new FirstClass(); PropertyInfo pInstance = typeof(FirstClass).GetProperty("NewsId");//搜索具有指定名称的公共属性 pInstance.SetValue(fClass, 11, null);//设置指定实例 属性 的值 Console.WriteLine("新闻ID:"+fClass.NewsId); Console.WriteLine("新闻图片:"+fClass.NewsImage);
1 0
- C# 反射通过GetCustomAttributes方法,获得自定义特性
- C# 反射通过GetCustomAttributes方法,获得自定义特性
- C#反射的GetCustomAttributes方法
- c#反射中GetMethods()和GetCustomAttributes()方法
- GetCustomAttributes获得自定义属性
- c#通过反射获取类上的自定义特性
- c#通过反射获取类上的自定义特性
- c#通过反射获取类上的自定义特性
- StructLayoutLayout 属性无法通过GetCustomAttributes 或者 Attributes获得
- C#自定义特性和反射
- c# 特性/属性(Attribute) 以及使用反射查看自定义特性
- c# 特性/属性(Attribute) 以及使用反射查看自定义特性
- C#属性与特性,方法,反射
- C#中通过反射查看程序集的特性信息
- java反射通过get方法获得属性值
- java 反射通过get方法获得属性值
- java 反射通过get方法获得属性值
- java 反射通过get方法获得属性值
- 海量数据:判断一棵树是否为另一棵树的子树
- 面向对象设计思想
- HZ的概念
- 45个超实用的JavaScript技巧及最佳实践
- Android 自动编译、打包生成apk文件 1 - 命令行方式
- C# 反射通过GetCustomAttributes方法,获得自定义特性
- 图解正向代理、反向代理、透明代理
- 用c++实现颜色空间rgb,grey,luv和lab的互转
- QQ聊天布局——利用通知机制实现键盘处理
- 13、UITextField-OC+UI
- VS2012项目中使用CocoStudio相关文件的设置
- Firefox奇怪的文字溢出bug,百思不得其解
- android 学习笔记(8)content provider共享数据
- YARN加载本地库抛出Unable to load native-hadoop library解决办法