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. .NET MVC 学习笔记(一)— 新建MVC工程

    一..NET MVC 学习笔记(一)—— 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...

  2. 札记:Property动画

    简介 Android 3.0 (API level 11)引入了属性动画系统,它是一个完善的框架,可以用来对几乎任何对象进行动画.只需要指定要动画的对象属性,动画时长,属性值区间等,无论对像是否在屏幕 ...

  3. python 使用unittest进行单元测试

    import unittest import HTMLTestRunner """ Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面 ...

  4. 第二十三节:Java语言基础-详细讲解函数与数组

    函数 函数在Java中称为方法,在其他语言中可能称为函数,函数,方法就是定义在类中具有特定功能的程序.函数,在Java中可称为方法. 函数的格式: 修饰符 返回值类型 函数名(参数类型 参数1, 参数 ...

  5. Swift 里 Set(五)Adding & Removing Elements

    Adding Elements internal func _unsafeInsertNew(_ element: __owned Element) { _internalInvariant(coun ...

  6. javascript编程中this解析

    一.为什么要使用this? this 提供了一种更优雅的方式来隐式"传递"一个对象引用,因此可以将 API 设计得更加简洁并且易于复用.随着你的使用模式越来越复杂,显式传递上下文对 ...

  7. web自动化测试---自动化脚本设置百度搜索每页显示条数

    前面学的都是基础知识,本篇将进入实战练习 以百度“搜索设置”为对象进行测试用例的写作: 百度的搜索设置在首页的“设置”里面,鼠标悬停之后即可显示,如下图红框位置: 测试目标是,修改每页的显示条数为50 ...

  8. Set "$USE_DEPRECATED_NDK=true" in gradle.properties to continue using the current NDK integration. 解决办法

    1.将 jni 文件夹名改为 cpp: 2.添加 CMakeLists.txt; 3.修改 build.gradle; externalNativeBuild { cmake { path " ...

  9. Java:类与对象概念

      什么是类? 怎样定义一个类? 什么是对象,类和对象之间是什么关系,怎样创建一个对象? 对象引用和对象在内存中是如何分配的? 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象 ...

  10. 【Java基本功】一文了解Java中继承、封装、多态的细节

    本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...