条件特性类

//如果没有定义 wjire 或者 refuge,
//编译器不会再元数据中生成特性信息,也就是说利用反射找不到特性信息
//但是,特性类的定义元数据和实现仍在程序集中
//#define wjire
#define refuge

using System;
using System.Diagnostics;
using System.Reflection;

namespace Test3
{
    [Cond]
    class Program
    {
        static void Main(string[] args)
        {
            //条件特性类
            var flag = CustomAttributeExtensions.IsDefined(typeof(Program), typeof(CondAttribute));
            Console.WriteLine(flag);

            var cond = CustomAttributeExtensions.GetCustomAttribute(typeof(Program), typeof(CondAttribute));
            Console.WriteLine(cond?.GetType());
            Console.ReadKey();
        }
    }

    [Conditional("wjire")]
    [Conditional("refuge")]
    class CondAttribute : Attribute
    {
        public CondAttribute()
        {
            Console.WriteLine("this is ctor");
        }
    }
}

原文地址:https://www.cnblogs.com/refuge/p/8971711.html

时间: 2024-08-04 22:15:58

条件特性类的相关文章

C#特性类的使用

特性类的使用过程: 第一步:定义一个特性类,定义一些成员来包含验证时需要的数据:第二步:创建特性类实例:创建一个特性类的实例,里面包含着验证某一个属性或者字段需要的数据.将该实例关联到某个属性上面.第三步:使用特性类实例可以通过调用某个类型的GetProperties()方法,获取属性,然后调用类型属性成员的GetCustomAttributes()方法,获取该属性关联的特性类实例,然后使用查找到的特性类实例验证新建对象. 第一步:定义特性类 第二步:创建一个特性类的实例,并关联一个属性 pub

条件锁类

#include <pthread.h> class CTestLock { public: CTestLock() { pthread_mutex_init(&mutex_t_, NULL); pthread_cond_init(&cond_t_, NULL); } ~CTestLock() { pthread_mutex_destroy(&mutex_t_); pthread_cond_destroy(&cond_t_); } int Lock() { in

Net特性类Description了解下

NET特性类都有个特点类名+Attribute,继承基类Attribute,我们看下微软自带的特性类:DescriptionAttribute namespace System.ComponentModel { // 摘要: // 指定属性或事件的说明. [AttributeUsage(AttributeTargets.All)] public class DescriptionAttribute : Attribute { // 摘要: // 指定 System.ComponentModel.

c#特性类 Attribute

Attribute FYI Link: Attribute在.net编程中的应用(一) Attribute在.net编程中的应用(二) Attribute在.net编程中的应用(三) Attribute在.net编程中的应用(四) Attribute在.net编程中的应用(五) Attribute在.net编程中的应用(六) HQL: Hibernate 大全中的大全

【C#进阶系列】17 特性Attribute

这个东西有的叫定制特性,然而我喜欢直接叫特性,但是这样的话一些人不知道我说的是什么,如果我说是Attribute的话那么知道的或者用过的就都懂了. 还记得讲到枚举和位标志那一章,关于位标志,有一个[Flags]的用法. [ComVisible(true)] [Flags] public enum FileAttributes { /***/ } 这里的ComVisible和Flags就是特性. 特性的作用 利用特性可宣告式地为自己的代码构造添加注解来实现特殊功能.它相当于往元数据表里写附加信息,

C# 语言规范_版本5.0 (第0章 目录)

C# 语言规范 版本5.0 注意 © 1999-2012 Microsoft Corporation.保留所有权利. Microsoft.Windows.Visual Basic.Visual C# 和 Visual C++ 是 Microsoft Corporation 在美国和/或其他国家/地区的注册商标或商标. 本文提及的其他产品和公司名称可能是其各自所有者的商标. 目录 1. 介绍......................................................

反射+type类+Assembly+特性

什么是元数据,什么是反射: 程序是用来处理数据的,文本和特性都是数据,而我们程序本身(类的定义和BLC中的类)这些也是数据. 有关程序及其类型的数据被称为元数据(metadata),它们保存在程序的程序集中. 程序在运行时,可以查看其它程序集或其本身的元数据.一个运行的程序查看本身的元数据或者其他程序集的元数据的行为叫做反射. 下面我们我们来学习如何使用Type类来反射数据,以及如何使用特性来给类型添加元数据. Type位于System.Reflection命名空间下 Type类 预定义类型(i

.NET技术-1.0.使用反射、特性简化代码(验证Model类)

使用反射.特性简化代码 参考项目:利用反射验证Model类/AssemblyVerification 假设现在有一个学生类(Student) /// <summary> /// 学生类 /// </summary> public class Student { /// <summary> /// 名字 /// </summary> private string name; public string Name { get { return name; } s

类的property特性

目录 什么是 property特性 property特性单独使用 property特性+类的封装 setter/deleter装饰器 property的古老用法(了解) property特性练习 什么是 property特性 property装饰器用于将被装饰的方法伪装成一个数据属性,在使用时可以不用加括号而直接使用 例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解) 成人的BMI数值: 过轻:低于18.5 正常:18.5-23.9