自定义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. jQuery 的ready事件和 JavaScript 的load事件对比

    为了理解2个事件的异同,先了解一下HTML文档加载顺序 HTML DOM文档加载步骤 HTML DOM文档加载是按顺序执行的,这与浏览器的渲染方式有关,一般浏览器渲染操作的顺序大致按如下几个步骤 1, ...

  2. [转载]如何查看某个查询使用了多少TempDB空间

    http://www.cnblogs.com/CareySon/p/3910337.html 通过下面脚本可以查看某个查询实用的TempDB的空间. 第一步是查询出当下TempDB实用空间是多少, 第 ...

  3. JS之路——日期函数

    时间对象是一个我们经常要用到的对象,无论是做时间输出.时间判断等操作时都与这个对象离不开.除开JavaScript中的时间对象外,在VbScript中也有许多的时间对象,而且非常好用.下面还是按照我们 ...

  4. EventSystem

    Unity5.0 EventSystem事件系统的详细说明 一.EventSystem对象的说明 当我们在场景中创建任一UI对象后,Hierarchy面板中都可以看到系统自动创建了对象EventSys ...

  5. get set

    关于C# get set的文章很多,但是笔者的这篇文章有它的特别之处,笔者用简单的语言把c# get set讲述的十分明了. C# get set释一:属性的访问器包含与获取(读取或计算)或设置(写) ...

  6. SCALA当的trait

    不是特别懂,但感觉和RUBY当中的MIX-IN功能有几分相似,这又扯到了多重继承及JAVA当中的接口虚拟类了.. package com.hengheng.scala class UseTrait { ...

  7. Codeforces Round #312 (Div. 2) A.Lala Land and Apple Trees

    Amr lives in Lala Land. Lala Land is a very beautiful country that is located on a coordinate line. ...

  8. COJN 0485 800503寻找平面上的极大点

    800503寻找平面上的极大点 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在一个平面上,如果有两个点(x,y),(a,b) ...

  9. treap启发式合并

    注意输入v要在建根的前面. #include <cstdio> #include <iostream> #include <algorithm> #include ...

  10. ubuntu进入命令登录界面

    按ctrl+alt+F1或者ctrl+alt+F2进入系统终端,可以以命令行界面登录系统.