Conditional特性用法

  说明:根据预处理标识符执行方法。Conditional 特性是 ConditionalAttribute 的别名,可应用于方法或属性类。相对于#if和#endif,更灵活更简洁和不易出错。
例如:

#define CONDITIONA

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Test1();
            Test2();
            Console.ReadKey();
        }

        [Conditional("CONDITIONA")]
        public static void Test1()
        {
            Console.WriteLine("Test1");
        }

        public static void Test2()
        {
            Console.WriteLine("Test2");
        }
    }
}

  这时Test1和Test2都将被执行,如果注释掉#define CONDITIONA,Test1将不会被执行。
  也可以同时定义多个Conditional特性,这时多个特性之间的关系为或:

class Program
    {
        static void Main(string[] args)
        {
            Test1();
            Test2();
            Console.ReadKey();
        }

        [Conditional("CONDITIONA"), Conditional("CONDITIONB")]
        public static void Test1()
        {
            Console.WriteLine("Test1");
        }

        public static void Test2()
        {
            Console.WriteLine("Test2");
        }
    }
 如果要获得逻辑与效果,需要将所需执行代码全部放到Test2中执行:
class Program
    {
        static void Main(string[] args)
        {
            Test1();
            Console.ReadKey();
        }

        [Conditional("CONDITIONA")]
        public static void Test1()
        {
            Test2();
        }
        [Conditional("CONDITIONB")]
        public static void Test2()
        {
            Console.WriteLine("Test1");
            Console.WriteLine("Test2");
        }
    }

Conditional特性用法

时间: 2024-10-14 07:34:55

Conditional特性用法的相关文章

C# 使用Conditional特性而不是#if条件编译

概述 #if/#endif 语句常用来基于同一份源码生成不同的编译结果,其中最常见的就是debug版和release版.但是这些工具在实际应用中并不是非常友好,因为它们容易被滥用,其代码页进而难以理解或调试.C#设计中考虑到这个问题,并提供了更好的工具——Conditional特性,用来为不同的环境编译不同的机器码.Conditional特性适用于方法的层面,这将强制我们将条件代码拆分为独立的方法.在需要编写条件代码时,我们应该使用Conditional特性来替代#if/#endif. 功能描述

Conditional特性

#define DoTrace//这里定义了标注符号,注释掉该行,那么标注有 [Conditional("DoTrace")]特性的方法将不执行 using System; using System.Diagnostics; namespace ExofConditional { class Program { [Conditional("DoTrace")] static void TraceMessage(string str) { Console.WriteL

edgesForExtendedLayout ios7新特性用法摘录

edgesForExtendedLayout是一个类型为UIExtendedEdge的属性,指定边缘要延伸的方向. 因为iOS7鼓励全屏布局,它的默认值很自然地是UIRectEdgeAll,四周边缘均延伸,就是说,如果即使视图中上有navigationBar,下有tabBar,那么视图仍会延伸覆盖到四周的区域. 来解决UINavigationBar透明的问题.设置了UIRectEdgeNone之后,你嵌在UIViewController里面的UITableView和UIScrollView就不会

Conditional - 编译屏蔽特性

public class A1 : MonoBehaviour { void Start() { Func(); } [System.Diagnostics.Conditional("UNITY_EDITOR")] void Func() { GameObject.CreatePrimitive(PrimitiveType.Cube); } } 标记了Conditional特性的函数,相当于#if ....预编译指令 比如上述代码可以达到只在编辑器下可用的效果,为了测试编译,打包了一下

.NET之特性和属性

1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定,[Serializable].[Flags].[DllImport].[AttributeUsage]这些的构造,相信我们都见过吧,那么你是否了解其背后的技术. 提起特性,由于高级语言发展的历史原因,不免让人想起另一个耳熟能详的名字:属性.特性和属性,往往给初学者或者从C++转移到C#的人混淆的概

你必须知道的.NET之特性和属性(转)

1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定,[Serializable].[Flags].[DllImport].[AttributeUsage]这些的构造,相信我们都见过吧,那么你是否了解其背后的技术. 提起特性,由于高级语言发展的历史原因,不免让人想起另一个耳熟能详的名字:属性.特性和属性,往往给初学者或者从C++转移到C#的人混淆的概

.NET之特性和属性(转)

1. 引言 attribute是.NET框架引入的有一技术亮点,因此我们有必要花点时间走进一个发现attribute登堂入室的入口.因为.NET Framework中使用了大量的定制特性来完成代码约定,[Serializable].[Flags].[DllImport].[AttributeUsage]这些的构造,相信我们都见过吧,那么你是否了解其背后的技术. 提起特性,由于高级语言发展的历史原因,不免让人想起另一个耳熟能详的名字:属性.特性和属性,往往给初学者或者从C++转移到C#的人混淆的概

C#-特性,反射,动态编程

参考文档 https://www.cnblogs.com/SignX/p/11569837.html 特性 侵删https://www.cnblogs.com/forever-Ys/p/10428568.html 一.什么是特性 特性是一种允许我们向程序的程序集添加元数据的语言结构,它是用于保存程序结构信息的某种特殊类型的类.简单说就是为一个类或者类的属性等添加更多的说明与标记 MSDN中对它的解释是:特性提供功能强大的方法以将声明信息与 C# 代码(类型.方法.属性等)相关联.特性与程序实体关

C#图解教程 第二十四章 反射和特性

反射和特性元数据和反射Type 类获取Type对象什么是特性应用特性预定义的保留的特性Obsolete(废弃)特性Conditional特性调用者信息特性DebuggerStepThrough 特性其他预定义特性有关应用特性的更多内容多个特性其他类型的目标全局特性自定义特性声明自定义特性使用特性的构造函数指定构造函数使用构造函数构造函数中的位置参数和命名参数限制特性的使用自定义特性的最佳实践访问特性使用IsDefined方法使用GetCustomAttributes方法 Note 类的元数据包含