首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#-特性、反射

C#-特性、反射

作者头像
祝你万事顺利
发布2019-05-28 13:39:51
2980
发布2019-05-28 13:39:51
举报
特性

特性(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获取对象的方法

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.04.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 特性
  • 程序集
  • 反射
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档