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. C#常用代码(更新中)

    文件(夹)的相关操作 新建文件夹 If(!Directory.Exist(路径)) Directory.CreateDirectory(路径); 删除文件夹 Directory.Delete(路径,t ...

  2. 通过MFC设计一个简单的计价程序

    1.实验目的 掌握使用MFC应用程序向导创建应用程序的方法. 掌握新建对话框资源的方法. 掌握生成对话框的方法. 2.实验内容 用应用程序创建一个默认的对话框应用程序,在对话框中能进入下一个对话框,在 ...

  3. 2019-4-26 css学习笔记

    CSS简介:Cascading Style Sheets(层叠样式表)的缩写,它是一种用来表现HTML或XML等文件样式的计算机语言. CSS的作用:是定义网页外观(例如,字体.背景.文本.位置.布局 ...

  4. Android、JavaScript、WebView之间的交互学习

    一.WebView调用Java //1.允许WebView加载jsmWebView.getSettings().setJavaScriptEnabled(true); //2.编写js的接口 ---- ...

  5. cad.net cad启动慢? cad2008启动慢? cad启动延迟? cad卡住? cad98%卡? 默认打印机!!

    默认打印机是不是联网打印机,如果cad找不到这个打印机将会很慢才打开cad的界面(它真的不是卡死了,而是找不到...) 奇妙的是桌子至今都没有利用新建线程的方式来控制这个打印机等待,而是直接在主程序上 ...

  6. Eclipse 中 Java 代码报版本错误的问题

    今天碰到了eclipse中的代码一直报错,后来发现是编译环境的问题,记录一下. 项目build path的JDK版本是开发的时候编译器需要使用到的,例如,如果用的JDK1.4就不能使用泛型. 而jav ...

  7. assembly.xml

    [官网地址]:http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html <assembly xmlns=" ...

  8. String类、常量池、字符串比较

    String类.常量池.字符串比较 一:String类           1.String类又称作不可变字符序列           2.String位于java.lang包中,Java程序默认导入 ...

  9. 一个简单的C语言题背后的故事

    最近看到了一个C语言问题,是要计算出这个函数的输出: #include <stdio.h> int Test(int x,int y, int z){ printf("x,y,z ...

  10. linux pidstat 命令详解

    pidstat 概述 pidstat是sysstat工具的一个命令,用于监控全部或指定进程的cpu.内存.线程.设备IO等系统资源的占用情况.pidstat首次运行时显示自系统启动开始的各项统计信息, ...