ConditionalAttribute类

msdn解释:

指示编译器应忽略方法调用或属性,除非已定义指定的条件编译符号。

命名空间:

System.Diagnostics

语法:

//
// 摘要:
// 指示编译器,除非定义了指定的有条件编译符号,否则,应忽略方法调用或属性。
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
[ComVisible(true)]
public sealed class ConditionalAttribute : Attribute

备注:

 可以将ConditionalAttribute特性应用于方法和类。但是,仅当类型派生自Attribute时,对类使用此特性才有效。如果将ConditionalAttribute应用于任何其它类型,它将被忽略或产生编辑器警告或错误消息。
在将ConditionalAttribute应用于方法时,会指示编译器:如果未定义与ConditionalAttribute关联的条件编译符号,则不应将对此方法的调用编译为Microsoft中间语言(MSIL)。

错误示例1:将ConditionalAttribute应用于类

 [Conditional("DEBUG")]
public class ToolKit { }

提示错误信息如下:

特性“Conditional”仅对方法或特性类有效

错误示例2:将ConditionalAttribute应用于属性

 public class ToolKit
{
[Conditional("DEBUG")]
public string Name { get { return ""; } }
}

提示错误信息如下:

特性“Conditional”对此声明类型无效。它仅对“类, 方法”声明有效。

正确示例1:将ConditionalAttribute应用于特性类

 [Conditional("DEBUG")]
public class ToolKit : Attribute { }

正确示例2:将ConditionalAttribute应用于方法

 public class ToolKit : Attribute
{
[Conditional("Li")]
[Conditional("Buged")]
public static void FuncA()
{
Console.WriteLine("Created by Li, Buged");
} [Conditional("Zhang"), Conditional("NoBug")]
public static void FuncB()
{
Console.WriteLine("Created by Zhang, NoBug");
}

ConditionalAttribute的应用:

  public class ToolKit
{
[Conditional("Li")]
[Conditional("Buged")]
public static void FuncA()
{
Console.WriteLine("Created by Li, Buged");
} [Conditional("Zhang"), Conditional("NoBug")]
public static void FuncB()
{
Console.WriteLine("Created by Zhang, NoBug");
}
 //C#宏定义,定义在所有代码前
#define Li
//#define Zhang using System; namespace AopProject.Client
{
class Program
{
static void Main(string[] args)
{
ToolKit.FuncA();
ToolKit.FuncB(); Console.ReadKey();
}
}
} /*
结果为:
Created by Li,Buged
*/

ConditionalAttribute和#if #endif预处理命令:

上述代码也可以以另一种写法实现,如下:

 //C#宏定义,定义在所有代码前
#define Li
//#define Zhang using System; namespace AopProject.Client
{
class Program
{
static void Main(string[] args)
{
#if Li
ToolKit.FuncA();
ToolKit.FuncB();
#endif Console.ReadKey();
}
}
}

C#特性:ConditionalAttribute的更多相关文章

  1. C#使用ConditionalAttribute特性来实现代码调试

    转自:http://www.csharpwin.com/csharpspace/10729r8541.shtml #if/#endif条件编译常用来由同一份源代码生成不同的结果文件,最常见的有debu ...

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

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

  3. C#中的 特性 详解(转载)

    本篇幅转载于:http://www.cnblogs.com/rohelm/archive/2012/04/19/2456088.html C#中特性详解 特性提供了功能强大的方法,用于将元数据或声明信 ...

  4. 【C#进阶系列】18 特性Attribute

    这个东西有的叫定制特性,然而我喜欢直接叫特性,但是这样的话一些人不知道我说的是什么,如果我说是Attribute的话那么知道的或者用过的就都懂了. 还记得讲到枚举和位标志那一章,关于位标志,有一个[F ...

  5. 关于C# 中的Attribute 特性

    关于C# 中的Attribute 特性 作者: 钢钢  来源: 博客园  发布时间: 2011-01-09 23:30  阅读: 13921 次  推荐: 12   原文链接 [收藏] 摘要:纠结地说 ...

  6. C#中检测某个类(方法、程序集等各种部分)是否应用了指定的特性以及对特性的一些简单操作

    前言:不管是自定义的一些特性,或者是C#中内置的特性,均继承自Attribute这个类,这个类也提供了一些方法,方便我们使用. Attribute类有三个静态方法:1.IsDefined,如果有指定的 ...

  7. Attribute 特性

    转载   不错   摘要:纠结地说,这应该算是一篇关于Attribute 的笔记,其中的一些思路和代码借鉴了他人的文笔(见本文底部链接).但是,由于此文对Attribute 的讲解实在是叫好(自夸一下 ...

  8. 十七、C# 反射、特性和动态编程

    反射.特性和动态编程   1.访问元数据 2.成员调用 3.泛型上的反射 4.自定义特性 5.特性构造器 6.具名参数 7.预定义特性 8.动态编程   特性(attribute)是在一个程序集中插入 ...

  9. C# 语言规范_版本5.0 (第17章 特性)

    1. 特性 C# 语言的一个重要特征是使程序员能够为程序中定义的实体指定声明性信息.例如,类中方法的可访问性是通过使用 method-modifiers(public.protected.intern ...

随机推荐

  1. List 接口中ArrayList Vector LinkedList 比较

    访问权限Arryist最快 其次Vector  最慢LinkedList

  2. Alpha冲刺-(9/10)

    Part.1 开篇 队名:彳艮彳亍团队 组长博客:戳我进入 作业博客:班级博客本次作业的链接 Part.2 成员汇报 组员1(组长)柯奇豪 过去两天完成了哪些任务 进一步优化代码,结合自己负责的部分修 ...

  3. 《mysql必知必会》学习_第14章_20180806_欢

    第14章:使用子查询. 子查询是镶嵌在其他查询里面,相当其他的select查询的条件来. P91 select order_num from where prod_id='tnt2';   #检索条件 ...

  4. WPF 绘制曲线图

    之前一直用GDI绘图,后面公司要求使用WPF,网上WPF资料太少(可能自己没找到吧),自己写了个测试用,可以拖动. 前端代码 <Window x:Class="Wpf绘图.Window ...

  5. unity 简单通用游戏模式设计

    好吧好吧,又谈到这个问题了,其实早就想写这个博客了,犹豫了好久.在设计游戏的时候我本人是很排斥什么游戏架构设计,mvc什么的,我只想马上动手就把自己的游戏玩法最快的用代码敲出来,还不会出无法挽回的错误 ...

  6. Mac 下 Gradle 环境配置

    1. gradle路径的查找 然后gradle 右键 显示简介 复制下蓝色的 2. 环境变量的配置 在.bash_profile文件中,添加如下图选中内容的配置信息: 执行source .bash_p ...

  7. Android Fragment用法知识点的讲解

    Android Fragment用法的讲解 碎片,它的出现是为了更好展示UI的设计,让程序更加得到充分的展示.Fragment的出现,如微信的额主界面包含多个Fragment,使得微信功能更加简洁明了 ...

  8. I2C软件调试思路并知识总结

    I2C是一种只使用两根线的串行通信协议.一根线是串行数据线SDA,另外一种是串行时钟线SCL. I²C允许相当大的工作电压范围,但典型的电压准位为+3.3V或+5v. I²C的参考设计使用一个7比特长 ...

  9. LeetCode:21_Merge Two Sorted Lists | 合并两个排序列表 | Easy

    题目:Merge Two Sorted Lists Merge two sorted linked lists and return it as a new list. The new list sh ...

  10. iOS-UIImage图片绘制颜色

    - (UIImage *)dtk_setImageColor:(UIColor *)imageColor{ //获取画布 UIGraphicsBeginImageContextWithOptions( ...