Attribute 是C#非常重要的一块内容,需要研究一下。

Attribute  的简单使用:简而言之,就是可以自定义通用标志位,而不是在每个所需的类型中分别增加标志位。

    //class专用attribute
[AttributeUsage(AttributeTargets.Class)]
public class TestAttribute : Attribute
{
public bool ReadFlag { get; set; } public bool WriteFlag { get; set; } public TestAttribute(){ } public TestAttribute(bool readFlag, bool writeFlag)
{
this.ReadFlag = readFlag;
this.WriteFlag = writeFlag;
}
} //property专用attribute
[AttributeUsage(AttributeTargets.Property)]
public class TestFieldAttribute : Attribute
{
public bool IsIgnore { get; set; } public TestFieldAttribute(){ } public TestFieldAttribute(bool isIgnore)
{
this.IsIgnore = isIgnore;
}
} //数字基类
public abstract class TestDemoBase
{
public abstract int Num { get; set; }
} //数字类一
[Test(true, true)] //使用时可以去掉"Attribute"后缀
public class TestDemoA : TestDemoBase
{
[TestField(IsIgnore = false)]
public override int Num { get; set; }
} //数字类二
[Test(true, false)]
public class TestDemoB : TestDemoBase
{
[TestField(IsIgnore = true)]
public override int Num { get; set; }
} //针对数字基类的打印接口
public static class Writer
{
public static void Output<T>(T writer) where T : TestDemoBase
{
var objectType = typeof(T); //typeof参数为类型而不是对象
var tagAttr = objectType.GetCustomAttribute(typeof(TestAttribute), false) as TestAttribute; //获取类的单个attribute
if(tagAttr.WriteFlag == true)
{
Console.WriteLine("Output:" + writer.Num.ToString()); //write标志为true则可以打印
}
else
{
var propertyInfo = objectType.GetProperty("Num");
foreach (var attribute in propertyInfo.GetCustomAttributes(false)) //获取所有attributes
{
if (attribute.GetType() == typeof(TestFieldAttribute))
{
if ((attribute as TestFieldAttribute).IsIgnore == true) //成员有ignore则可以忽略write标志
Console.WriteLine("Output:" + writer.Num.ToString());
}
}
}
}
} public class Program
{
static void Main(string[] args)
{
var demoA = new TestDemoA();
demoA.Num = ; var demoB = new TestDemoB();
demoB.Num = ; Writer.Output(demoA);
Writer.Output(demoB);
Console.Read();
}
}

  看来马上要学习一下 C# 的反射原理了。

C# Attribute的更多相关文章

  1. [C#] 剖析 AssemblyInfo.cs - 了解常用的特性 Attribute

    剖析 AssemblyInfo.cs - 了解常用的特性 Attribute [博主]反骨仔 [原文]http://www.cnblogs.com/liqingwen/p/5944391.html 序 ...

  2. JavaScript特性(attribute)、属性(property)和样式(style)

    最近在研读一本巨著<JavaScript忍者秘籍>,里面有一篇文章提到了这3个概念. 书中的源码可以在此下载.我将源码放到了线上,如果不想下载,可以直接访问在线网址,修改页面名就能访问到相 ...

  3. [C#] C# 知识回顾 - 特性 Attribute

    C# 知识回顾 - 特性 Attribute [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5911289.html 目录 特性简介 使用特性 特性 ...

  4. js attribute 和 jquery attr 方法

    attribute 是原生js dom 对象上的一个属性,这个属性有很多子属性,比如 isId(判断属性是否是Id) , name (获取属性名称) , value (获取属性值),attribute ...

  5. 【.net 深呼吸】自定义特性(Attribute)的实现与检索方法

    在.net的各个语言中,尤其是VB.NET和C#,都有特性这一东东,具体的概念,大家可以网上查,这里老周说一个非标准的概念——特性者,就是对象的附加数据.对象自然可以是类型.类型成员,以及程序集. 说 ...

  6. angular2系列教程(四)Attribute directives

    今天我们要讲的是ng2的Attribute directives.顾名思义,就是操作dom属性的指令.这算是指令的第二课了,因为上节课的components实质也是指令. 例子

  7. 学会给你的类(及成员)来定制一套自己的Attribute吧

    在通过Visual Studio创建的C#程序集中,都包含了一个AssemblyInfo.cs的文件,在这个文件中,我们常常会看到这样的代码 [assembly: AssemblyTitle(&quo ...

  8. Attribute操作的性能优化方式

    Attribute是.NET平台上提供的一种元编程能力,可以通过标记的方式来修饰各种成员.无论是组件设计,语言之间互通,还是最普通的框架使 用,现在已经都离不开Attribute了.迫于Attribu ...

  9. SharePoint 2016 配置向导报错 - The 'ListInternal' attribute is not allowed

    前言 配置SharePoint 2016的配置向导中,第三步创建配置数据库报错,然后百度.谷歌了一下,都没有解决,自己看日志搞定,也许会有人遇到类似问题,分享一下. 1.配置向导的错误截图,如下图: ...

  10. C# 知识特性 Attribute

    C#知识--获取特性 Attribute 特性提供功能强大的方法,用以将元数据或声明信息与代码(程序集.类型.方法.属性等)相关联.特性与程序实体关联后,可在运行时使用"反射"查询 ...

随机推荐

  1. JavaScript之作用域与作用域链

    今天是2016的第一天,我们得扬帆起航踏上新的征程了.此篇阐述JavaScript中很重要的几个概念:作用域与作用域链及相关知识点. 我们先从变量与作用域的行为关系开始讨论. 变量作用域 JavaSc ...

  2. JavaScript 操作 DOM 常用 API 总结

    文本整理了javascript操作DOM的一些常用的api,根据其作用整理成为创建,修改,查询等多种类型的api,主要用于复习基础知识,加深对原生js的认识. 基本概念 在讲解操作DOM的api之前, ...

  3. Git 的优点

    1. 快速 如果你每移动一下鼠标都要等待五秒,是不是很受不了?版本控制也是一样的,每一个命令多那么几秒钟,一天下来也会浪费你不少时间.Git的操作非常快速,你可以把时间用在别的更有意义的地方. 2. ...

  4. input页面居中,软键盘覆盖input

    input框位于底部 对于ios的软键盘遮盖input输入框问题,网上已经有了一些解决办法,无非就是改变布局,再加scroll.js插件实现滚动, input框位于顶部 这种情况不会出现问题, inp ...

  5. 狗血phonegap备忘录[3.3]

    phonegap平台就是个狗血的坑,最近的一个项目技术因为上面选型失败,使用了phonegap,加上客户的要求是"像微信一样",真可谓历经坎坷. 基本上评估一个项目是否应该或者可以 ...

  6. android bitmap的 一些简单操作

    /** 获取 drawable 的图片 可以循环 1.图名 2.drawable 3.包名 **/ int imgid = getResources().getIdentifier("ic_ ...

  7. staticMetaObject

    staticMetaObject : QObject 及其 子类 的静态属性成员. 定义如下: const QMetaObject staticMetaObject; QMetaObject 记录了 ...

  8. html contenteditable

    contenteditable 是html中的一個屬性,在HTML中,某些元素設置 contenteditable='true'  屬性時可以開啟該元素的編輯模式,contenteditable 可以 ...

  9. C#泛型类的简单创建与使用

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  10. 关于 yii 验证码显示, 但点击不能刷新的处理

    先说说 render 与 renderPartial, 各位看官, 先别走, 我没跑题, 这个问题如果需要解决, 关键就在 render 与 renderPartial 的区别. renderPart ...