C# 特性

特性是一种我们向程序的程序集增加元数据的语言结构。它是用于保存程序结构信息的某种特殊类型的类

将应用了特性的程序结构叫做目标

设计用来获取和使用元数据的程序(对象浏览器)叫做特性的消费者

C# 特性

 

#define IsShow

using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;

namespace _13_特性
{
    class Program
    {
        [Obsolete("这个方法已经被弃用了,请使用NewTest方法",false)]//特性:弃用 ,使用""能提示开发人员,后面true代表完全不能使用该方法,false是还能继续使用
        static void Test()
        {
            Console.WriteLine("test");
        }

        static void NewTest()
        {
            Console.WriteLine("new test");
        }

        [Conditional("IsShow")]//使用该方法要先定义宏,当宏存在时就可以使用该函数,当宏不存在该函数也不会被使用
        static void Show(string str)
        {
            Console.WriteLine(str);
        }

        //[CallerLineNumber]该特性是输出哪一行会调用这个方法
        //[CallerFilePath]该特性是返回调用该函数的文件名字
        //[CallerMemberName]该特性是返回的哪个函数用的这个方法
        [DebuggerStepThrough]//该特性代表调试的时候会跳过这个函数内部
        static void ShowLine(string str,[CallerLineNumber]int lineNumber = 0,[CallerFilePath]string file=null,[CallerMemberName]string main=null)
        {
            Console.WriteLine(str);
            Console.WriteLine(lineNumber);
            Console.WriteLine(file);
            Console.WriteLine(main);
        }

        static void Main(string[] args)
        {
            Test();

            Show("Start");

            Console.WriteLine("Work");

            Show("Emd");

            ShowLine("123");
        }
    }
}

自定义特性

using System;
using System.Collections.Generic;
using System.Text;

namespace _14_自定义特性
{
    [AttributeUsage(AttributeTargets.Class)]//运用系统自带的特性,表面这个我们自己写的特性只作用于类的
    internal sealed class MyAttribute:Attribute
    {
        //开发者
        public string developer;
        //版本
        public string version;
        //描述主要作用
        public string description;

        public MyAttribute(string developer, string version, string description)
        {
            this.developer = developer;
            this.version = version;
            this.description = description;
        }
    }
}

using System;

namespace _14_自定义特性
{
    [My("yuan","v1.1","测试")]
    class Program
    {
        static void Main(string[] args)
        {
            Type t = typeof(Program);

            bool result = t.IsDefined(typeof(MyAttribute), false);

            object[] att = t.GetCustomAttributes(false);//用该方法得到一个所有特性的元素
        }
    }
}

上一篇:C. 「NOIP2021模拟赛 By ZJ C」自然溢出 题解


下一篇:10.19 模拟赛题解报告