06-自定义Attribute标记案例
自定义Attribute:
1)Attribute都从System. Attribute类继承,类名一般以Attribute结尾
2) 标记类的用途—AttributeUsage标记(标记的标记):AttributeTargets:可以添加到哪些成员上。 AllowMultiple:是否允许在一个成员上标记这个Attribute的多个实例,默认false。标注在Attribute类的类名上方。
3)Attribute只是给类、成员做标记,本身没有什么意义,不会发生任何动作,就像小偷踩点在门上做标记(StealableAttribute)一样,具体这个标记会起到什么作用是由使用这个类、成员的代码决定的。
案例代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.Runtime.Serialization.Formatters.Binary; namespace _11动态创建一个对象的html表单页
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
Person p1 = new Person();
p1.Name = "hzy";
p1.Age = ;
p1.Email = "hzy@sina.com";
// Car car = new Car() { Brand = "兰博基尼", LicenseNo = "京00000" };
CreateFormByObject(p1);
} private void CreateFormByObject(object obj)
{
Type type = obj.GetType();//获取这个对象的type
StringBuilder sbHtml = new StringBuilder();
PropertyInfo[] pinfo = type.GetProperties();//获取当前对象中的所有的属性
foreach (PropertyInfo item in pinfo)
{
//这句话的意思是,获取当前遍历的属性Brand上所标记的UserLanguageAttribute特性
object[] objs = item.GetCustomAttributes(typeof(UserLanguageAttribute), false); //获取所有标记的特性,不包含父类中继承下来的特性
//item.GetCustomAttributes(false)
//objs[0].GetType().Name
//表示当前属性标记了这个特性(UserLanguageAttribute)
if (objs.Length > )
{
UserLanguageAttribute ula = (UserLanguageAttribute)objs[];
sbHtml.Append(ula.DisplayLanguage + ":<input value=\"" + item.GetValue(obj, null) + "\"/><br/>");
}
else
{
sbHtml.Append(item.Name + ":<input value=\"" + item.GetValue(obj, null) + "\"/><br/>");
}
}
webBrowser1.DocumentText = sbHtml.ToString();
}
} public class Person
{
[UserLanguage("xing ming")]
public string Name
{
get;
set;
}
[UserLanguage("nian ling")]
public int Age
{
get;
set; }
//[UserLanguage("yi mei er")]
public string Email
{
get;
set;
}
} public class Car
{
[UserLanguage("品牌")]
public string Brand
{
get;
set;
}
[UserLanguage("车牌号码")]
public string LicenseNo
{
get;
set;
}
} public class UserLanguageAttribute : Attribute
{
public UserLanguageAttribute(string lan)
{
this.DisplayLanguage = lan;
}
public string DisplayLanguage
{
get;
set;
}
}
}
运行结果:
aaarticlea/png;base64,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" alt="" />
06-自定义Attribute标记案例的更多相关文章
- .net c#获取自定义Attribute
前言: 在c#开发中,有时候我们需要读取 Attribute中的信息(关于Attribute , 我自己把他理解成一个可以为类,属性标记的东西,这个标记可以为你提供一些关于类,方法,属性的额外信息) ...
- Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论
Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...
- XsdGen:通过自定义Attribute与反射自动生成XSD
前言 系统之间的数据交互往往需要事先定义一些契约,在WCF中我们需要先编写XSD文件,然后通过自动代码生成工具自动生成C#对象.对于刚刚接触契约的人来说,掌握XMLSpy之类的软件之后确实比手写XML ...
- 2.C#自定义Attribute
阅读目录 一:C#自定义Attribute 二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets 三:Attribut ...
- 自定义Attribute 服务端校验 客户端校验
MVC 自定义Attribute 服务端校验 客户端校验/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Autho ...
- C#自定义Attribute值的获取与优化
C#自定义Attribute值的获取是开发中会经常用到的,一般我们的做法也就是用反射进行获取的,代码也不是很复杂. 1.首先有如下自定义的Attribute [AttributeUsage(Attri ...
- CVS导出&&自定义Attribute的使用
1.cvs导出:List转为byte[] /// <summary> /// CvsExport帮助类 /// </summary> public static class C ...
- 转:C#制作ORM映射学习笔记一 自定义Attribute类
之前在做unity项目时发现只能用odbc连接数据库,感觉非常的麻烦,因为之前做web开发的时候用惯了ORM映射,所以我想在unity中也用一下ORM(虽然我知道出于性能的考虑这样做事不好的,不过自己 ...
- 【MVC 笔记】MVC 自定义 Attribute 属性中的猫腻
原想在 MVC Action 上加一个自定义 Attribute 来做一些控制操作,最先的做法是在自定 Attribute 中定义一个属性来做逻辑判断,可惜事与愿违,这个属性值居然会被缓存起来,于是于 ...
随机推荐
- 【转】POJ题目分类
初级:基本算法:枚举:1753 2965贪心:1328 2109 2586构造:3295模拟:1068 2632 1573 2993 2996 图:最短路径:1860 3259 1062 2253 1 ...
- 141 Linked List Cycle(判断链表是否有环Medium)
题目意思:链表有环,返回true,否则返回false 思路:两个指针,一快一慢,能相遇则有环,为空了没环 ps:很多链表的题目:都可以采用这种思路 /** * Definition for singl ...
- Windows环境下 配置memcached (php)
memcached就不用介绍了-- 1:在Windows下安装memcached服务端软件,已经下载并上传云盘 ---传送门 记得带钥匙:ykrc 解压缩后里面的安装说明内有安装教程. 2:软件安装 ...
- Nginx源码研究五:NGINX的配置信息管理
配置信息是nginx系统重要的组成部分,配置信息的使用,实际上包含两层,一层是用户针对参数定义了值,例如下面nginx参数文件中的 keepalive_timeout 65,还有一部分是用户没有定义值 ...
- C# Ini文件操作
在开源中国看到的操作ini文件的,写的还不看,留着以后用 using System; using System.IO; using System.Runtime.InteropServices; us ...
- Tr A
Problem Description A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input 数据的第一行是一个T,表示有T组数据. 每组数据的第 ...
- java的占位符
java占位符的类型: 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.fo ...
- Solr4.8.0源码分析(3)之index的线程池管理
Solr4.8.0源码分析(3)之index的线程池管理 Solr建索引时候是有最大的线程数限制的,它由solrconfig.xml的<maxIndexingThreads>8</m ...
- spring-boot 测试
在线项目构建:http://start.spring.io/ 下载:bookpub.zip 导入Idea15.0.1 运行: y@y:bookpub$ ./gradlew clean bootRun ...
- KeilMDK4.7a下载地址/中文乱码解决/自动关联设置
推荐地址1,速度更快(确定为4.7a版本,且含注册机):1.http://www.mcuzone.com/software/keil/MDK470.RAR 2.http://kuai.xunlei.c ...