自定义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标记案例的更多相关文章

  1. .net c#获取自定义Attribute

    前言: 在c#开发中,有时候我们需要读取 Attribute中的信息(关于Attribute , 我自己把他理解成一个可以为类,属性标记的东西,这个标记可以为你提供一些关于类,方法,属性的额外信息) ...

  2. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  3. XsdGen:通过自定义Attribute与反射自动生成XSD

    前言 系统之间的数据交互往往需要事先定义一些契约,在WCF中我们需要先编写XSD文件,然后通过自动代码生成工具自动生成C#对象.对于刚刚接触契约的人来说,掌握XMLSpy之类的软件之后确实比手写XML ...

  4. 2.C#自定义Attribute

    阅读目录    一:C#自定义Attribute    二:AttributeUsageAttribute中的3个属性(Property)中的AttributeTargets   三:Attribut ...

  5. 自定义Attribute 服务端校验 客户端校验

    MVC 自定义Attribute 服务端校验 客户端校验/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Autho ...

  6. C#自定义Attribute值的获取与优化

    C#自定义Attribute值的获取是开发中会经常用到的,一般我们的做法也就是用反射进行获取的,代码也不是很复杂. 1.首先有如下自定义的Attribute [AttributeUsage(Attri ...

  7. CVS导出&&自定义Attribute的使用

    1.cvs导出:List转为byte[] /// <summary> /// CvsExport帮助类 /// </summary> public static class C ...

  8. 转:C#制作ORM映射学习笔记一 自定义Attribute类

    之前在做unity项目时发现只能用odbc连接数据库,感觉非常的麻烦,因为之前做web开发的时候用惯了ORM映射,所以我想在unity中也用一下ORM(虽然我知道出于性能的考虑这样做事不好的,不过自己 ...

  9. 【MVC 笔记】MVC 自定义 Attribute 属性中的猫腻

    原想在 MVC Action 上加一个自定义 Attribute 来做一些控制操作,最先的做法是在自定 Attribute 中定义一个属性来做逻辑判断,可惜事与愿违,这个属性值居然会被缓存起来,于是于 ...

随机推荐

  1. CSS3重要内容翻译

    以上是废话 1.3    此处未完全确认,相较于css3和css3的选择器,区别包括: 基础定义改变(选择器.选择器组,简单选择器等),特别的,作为css2中简单选择器,如今被成为简单选择器序列,“简 ...

  2. Linux CentOS6.4下Mysql数据库的安装与配置

    一.mysql简介 说到数据库,我们大多想到的是关系型数据库,比如mysql.oracle.sqlserver等等,这些数据库软件在windows上安装都非常的方便,在Linux上如果要安装数据库,咱 ...

  3. Shell test命令

    Shell中的 test 命令用于检查某个条件是否成立,它可以进行数值.字符和文件三个方面的测试. 数值测试 参数 说明 -eq 等于则为真 -ne 不等于则为真 -gt 大于则为真 -ge 大于等于 ...

  4. 用jquery写了个选项卡,当作一个笔记吧。

    <!DOCTYPE HTML> <html lang="en"> <head> <meta http-equiv="Conten ...

  5. spring 入门笔记(一)

    最近学习spring 通过笔记形式加深自己对spring的理解,也希望能跟各位入门者分享和讨论. 一.下载spring 下载spring也费了不少功夫,目前还没从spring官网找到下载入口,我从下面 ...

  6. html中插入flash代码详解(转载)

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://down ...

  7. jQuery中$.get()、$.post()和$.ajax()

    jQuery.get()方法: $.get(url,data,success(response,status,xhr),dataType) 该函数是简写的 Ajax 函数,等价于: $.ajax({ ...

  8. CAFFE安装 CentOS无GPU

    前记 由于是在一台用了很久的机器上安装caffe,过程比较复杂,网上说再干净的机器上装比较简单.如果能有干净的机器,就不用再过这么多坑了,希望大家好运!介绍这里就不说了,直接进入正题: Caffe 主 ...

  9. TCP回射服务器程序:str_echo函数

    str_echo函数执行处理每个客户的服务: 从客户读入数据,并把它们回射给客户 读入缓冲区并回射其中内容: read函数从套接字读入数据,writen函数把其中内容回射给客户 如果客户关闭连接,那么 ...

  10. ExtJS5_自定义菜单1

    顶部和底部区域已经作好,在顶部区域有一个菜单的按钮,这一节我们设计一个菜单的数据结构,使其可以展示出不同样式的菜单.由于准备搭建的是一个系统模块自定义的系统,因此菜单也是自定义的,在操作员系统登录的时 ...