天文般的Attribute

#define Buged
//C# 的宏定义必须出现在所有代码之前。当前只让 Buged 宏有效。
using System;
using System.Diagnostics; // 注意:这是为了使用包含在此名称空间中的ConditionalAttribute特性
namespace Con_Attribute
{
    class Program
    {
        static void Main(string[] args)
        {
            // 虽然方法都被调用了,但只有符合条件的才会被执行!
            ToolKit.FunA();
            ToolKit.FunB();
            ToolKit.FunC();
            ToolKit.FunD();
        }
    }
    class ToolKit
    {
        [ConditionalAttribute("Li")] // Attribute名称的长记法
        [ConditionalAttribute("Buged")]
        public static void FunA()
        {
            Console.WriteLine("Created By Li, Buged.");
        }
        [Conditional("Li")] // Attribute名称的短记法
        [Conditional("NoBug")]
        public static void FunB()
        {
            Console.WriteLine("Created By Li, NoBug.");
        }
        [ConditionalAttribute("Zhang")]// Attribute名称的长记法
        [ConditionalAttribute("Buged")]
        public static void FunC()
        {
            Console.WriteLine("Created By Zhang, Buged.");
        }
        [Conditional("Zhang")] // Attribute名称的短记法
        [Conditional("NoBug")]
        public static void FunD()
        {
            Console.WriteLine("Created By Zhang, NoBug.");
        }
    }
}


看了一篇博客园朋友的博文,这里的运行结果为:

Created By Li,Buged.

Created By Zhang,Buged.

官网解释为:表示自定义属性的基类  作为菜鸟的我,表示完全看不懂这个意思。

首先,例如这一块

[ConditionalAttribute("Buged")]
        public static void FunA()

FunA有个Buged这个特性,这个特性是干嘛的?说是干嘛的获取还是不太对,我的理解是当FunA里有了这个特性后,我该怎么去使用它?需要不需要去调用?如果不调用,那这个特性的理解是怎样理解的?说调用,那程序中应该怎么调用这个特性。

这个运行结果,也不太清楚它是咋得来的。后来查了几篇文章,都讲得比较笼统,没有给一个详细的解释,不明白之处,希望各位大神帮小弟解解惑。初学,望大家不要喷我

原文地址:https://www.cnblogs.com/colyn/p/3009620.html