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. HTML之<meta>使用和说明

    关于<meta>,我们都不陌生,随意打开一个网页查看源代码就可以看到<head>里出现它的身影. 简单来说,<meta>是描述 HTML 文档的元数据.例如网页描述 ...

  2. 长方体类Java编程题

    1. 编程创建一个Box类(长方体),在Box类中定义三个变量,分别表示长方体的长(length).宽(width)和高(heigth),再定义一个方法void setBox(int l, int w ...

  3. Mac Terminal open app with a file opened

    open -a /Applications/Sublime Text.app test.cpp

  4. c++ 异常处理(1)

    异常 (exception) 是 c++ 中新增的一个特性,它提供了一种新的方式来结构化地处理错误,使得程序可以很方便地把异常处理与出错的程序分离,而且在使用上,它语法相当地简洁,以至于会让人错觉觉得 ...

  5. spark中RDD的transformation&action

    简介: 1,transformation是得到一个新的RDD,方式很多,比如从数据源生成一个新的RDD,从RDD生成一个新的RDD 2,action是得到一个值,或者一个结果(直接将RDDcache到 ...

  6. 小程序基础知识点讲解-WXML + WXSS + JS,生命周期

    小程序基础 小程序官方地址,小程序开发者工具,点击此处下载.在微信小程序中有一个配置文件project.config.json,此文件可以让开发者在不同设备中进行开发. 微信小程序共支持5种文件,wx ...

  7. ElasticSearch核心知识总结(一)es的六种搜索方式和数据分析

    es的六种搜索方式 query string search GET /ecommerce/product/_search //查询所有数据 { "took": 4,//耗费几毫秒 ...

  8. Nginx---(Server虚拟主机)

    server{ listen PORT; server_name NAME; root /PATH: } 基于端口 listen指令监听在不同的端口; 基于IP 基于FQDN (域名,主机名) ser ...

  9. IntelliJ Idea 授权服务器使用

    JetBrains授权服务器 1 http://intellij.mandroid.cn/ 支持的版本 IntelliJ IDEA 7.0 或更高ReSharper 3.1 或更高ReSharper ...

  10. ubuntu解压rar文件

    一般通过默认安装的ubuntu是不能解压rar文件的,只有在安装了rar解压工具之后,才可以解压.其实在ubuntu下安装rar解压工具是非常简 单的,只需要两个步骤就可以迅速搞定. ubuntu 下 ...