Tpye类与Obsolete、Conditional以及System.Runtime.CompilerServices下[CallerFilePath]、[CallerLineNumber,[Call...

#define IsTest //定义一个宏
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;
using System.Diagnostics;
using System.Runtime.CompilerServices;


namespace 反射与特性
{
    class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = new MyClass();
            //Type type = myClass.GetType();//Type对象只存储类的成员,不存数据
            //Console.WriteLine(type.Name);
            //Console.WriteLine(type.Namespace);
            //Console.WriteLine(type.Assembly);
            //FieldInfo[] info = type.GetFields();//只能获取得公有字段,同样还有公有属性以及公有方法
            //foreach (FieldInfo info1 in info)
            //{
            //    Console.WriteLine(info1.Name);
            //}

            //程序集的加载方法一:
            //Assembly assem = myClass.GetType().Assembly;//先获取一个类的实例,再获取Assembly,
            //Console.WriteLine(assem.FullName);

            //程序集的加载方法二:Assembly.Load方法
            //Assembly assem = Assembly.Load("反射与特性");//目录下自动搜索
            // Type[] types = assem.GetTypes();//遍列assem
            // foreach (Type t in types)
            // {
            //     Console.WriteLine(t);
            // }

            //示例:Obsolete特性
            //  myClass.Test1();

            //示例:Conditional特性在using System.Diagnostics命名空间中
            //标识了此特性的方法,欲调用的话要有引用命名空间Using前启动宏#define IsTest 
            // 方法的代码会编译在程序中,但如果没有启动宏,运行时不会编译方法中的代码
            myClass.Test1();
            myClass.Test2();
            PrintOut("fdfs");
            Console.ReadKey();
        }
        //using System.Runtime.CompilerServices命名空间下的[CallerFilePath]获得调用了此方法的程序集的路径名,[CallerLineNumber]获得调用了此方法的第几行,[CallerMemberName]获得调用了此方法的方法名
        static void PrintOut(string str,[CallerFilePath]string fileName="",[CallerLineNumber]int linNumber=0,[CallerMemberName]string methodName="")
        {
            Console.WriteLine(str);
            Console.WriteLine(fileName);
            Console.WriteLine(linNumber);
            Console.WriteLine(methodName);
        }
    }
    class MyClass
    {
        private string name;
        private int id;
        public string Number;
        public string Name { get; set; }
        [Obsolete("这个方法过时,可以使用Test2代替")]//在调用时提示(弃用的)特性
        public void Test1()
        {
            Console.WriteLine("Test1");
        }
        [Conditional("IsTest")]//Conditional特性,标识了此特性的方法,欲调用的话要有引用命名空间Using前启动宏#define IsTest 
        public void Test2()
        {
            Console.WriteLine("Test2");
        }
    }
}

 

转载于:https://www.cnblogs.com/trlq/p/7201633.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值