C#-特性、反射

特性

特性(conditional)是一个类
是一个继承了Attribute的类

给程序添加的声明性标签
.Net 提供了两种特性:预定义特性 自定义特性
预定义特性 : 三种
1.条件方法 : 只有在预编译指令和conditional的条件一样时,才会执行方法

#define AAA

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;


namespace 特性
{
    class Program
    {
        static void Main(string[] args)
        {
            myFun();
        }
        //预定义特性 
        //条件方法:使用Conditional添加条件
        [Conditional("AAA")]
        private static void myFun()
        {
            Console.WriteLine("特性AAA");
        }
    }
}

2.标记不被使用的程序体
此时调用此方法,也能用但是会有绿色波浪线,表示已过时

        [Obsolete()]
        private static void OldFun()
        {
        }

此时就不能调用

        [Obsolete("请使用新的方法", true)]
        private static void OldFun()
        {
        }

3.AttributeUsage特性用来限制自定义特性能用在什么地方
是否可以重复添加,此特性是否可以被继承

[AttributeUsage(AttributeTargets.All,AllowMultiple = true,Inherited =true)]

自定义特性时,最后一个单词默认为Attribute,使用时会自动省略

5.想获得特性,需要用到反射

程序集

Assmbly类来加载程序集
通过Assmbly.Load()
Assmbly.LoadFrom()等获取程序集的dll

反射

反射:审查程序集内部元数据的能力
1.三种通过反射获得Type对象的方法
1)通过Type的staticMethod GetType()方法,参数为目标类型的全名
2)通过对象的GetType函数获得
3)使用typeOf运算符获得,参数为目标类
2.创建对象:通过调用构造函数创建对象
1)通过反射创建对象,首先获得构造函数的ConstructorInfo对象,再通过Invoke创建对象。

            //2.创建对象:通过调用构造函数创建的对象
            //要通过反射创建对象,就得获取到Person的构造函数
            //获取到Person对象的所有公开构造函数
            ConstructorInfo[] cons = typeA.GetConstructors();
            //遍历cons获取单个构造函数的参数信息(个数、顺序、类型)
            foreach (var item in cons)
            {
                Console.WriteLine("有一个构造函数的参数信息全部被打印出来了");
                //获取单个构造函数的所有参数
                ParameterInfo[] paras = item.GetParameters();
                //遍历单个构造函数的所有参数数组
                for (int i = 0; i < paras.Length; i++)
                {
                    Console.WriteLine("第" + i + "个参数的类型为:" + paras[i].ParameterType);
                }
                Console.WriteLine("------------------------------------------------------");
            }
            //通过获取到的构造函数信息,获取单个构造函数
            Type[] types = { typeof(int) };
            //获取到的就是只有一个int类型参数的构造函数
            ConstructorInfo con = typeA.GetConstructor(types);
            //调用con创建Person对象
            object o = con.Invoke(new object[] { 15 });
            

3.通过反射获取字段
1)FieldInfo存储type对象的GetFields();
2)MethofInfo获取对象的方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值