给方法打自定义标签再反射获取

1.自定义特性类

using System;
using System.Collections;
using System.Collections.Generic; /// <summary>
/// 自定义新特性
/// </summary>
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
public class CustomA : Attribute { }

2.获取

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine; public class MyTest : MonoBehaviour { // Use this for initialization
void Start () {
//反射自己这类
Type t = GetType();
//拿去本类的方法
MethodInfo[] _method = t.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.DeclaredOnly);
for (int i = ; i < _method.Length; i++)
{
System.Object[] _attrs = _method[i].GetCustomAttributes(typeof(CustomA), false); //反射获得用户自定义属性
var count = _attrs.Length;
for (int j = ; j < _attrs.Length; j++)
{
if (_attrs[j] is CustomA)
{
Debug.Log("被注册的方法为:" + _method[i].Name);
}
}
}
} // Update is called once per frame
void Update () { } [CustomA]
public void MySimpleMethod()
{ }
}

================================================================================================================================================================================================

【给类打上标签】获得相对于打上标签的类

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine; public class Test1 : MonoBehaviour { // Use this for initialization
void Start () {
//获取程序集
Assembly assembly = this.GetType().Assembly;
//得到程序集的显示名称
//Debug.Log(assembly.FullName);
//通过程序集 得到程序集中的所有的类
Type[] types = assembly.GetTypes();
//遍历类
foreach (Type item in types)
{
//获得打上CustomA标签的类(已设置 AttributeTargets.All)
System.Object[] _attrs = item.GetCustomAttributes(typeof(CustomA), false); //反射获得用户自定义属性
foreach (var it in _attrs)
{
if (it is CustomA)
{
Debug.Log("得到" + item.Name);
}
}
} //打印所有类
foreach (var type in types)
{
Debug.Log(type.Name);
}
} // Update is called once per frame
void Update () { }
}

【打标签的类】

using System.Collections;
using System.Collections.Generic;
using UnityEngine; [CustomA]
public class Test2 : MonoBehaviour { // Use this for initialization
void Start () { } // Update is called once per frame
void Update () { }
}

简写

        //获得当前类的程序集
Assembly x = this.GetType().Assembly;
//获取此程序集中的所有类
Type[] allClass = x.GetTypes();
//遍历操作
foreach (Type oneClass in allClass)
{
//获取类的attribute
var attribute = oneClass.GetCustomAttribute<NetworkMsg>();
//判断attribute是否为NetworkMsg
if (attribute is NetworkMsg)
{
Debug.Log(oneClass.Name);
}
}

使用c#特性,给方法或类打自定义标签再反射获取的更多相关文章

  1. java通过反射获取调用变量以及方法

    一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 @Test // 通过反射获取类定义的方法 public void testMeth ...

  2. C#反射 获取程序集信息和通过类名创建类实例(转载)

    C#反射获取程序集信息和通过类名创建类实例 . System.Reflection 命名空间:包含通过检查托管代码中程序集.模块.成员.参数和其他实体的元数据来检索其相关信息的类型. Assembly ...

  3. 通过反射获取及调用方法(Method)

    1.获取方法使用反射获取某一个类中的方法,步骤:①找到获取方法所在类的字节码对象②找到需要被获取的方法 Class类中常用方法: public Method[] getMethods():获取包括自身 ...

  4. .NET C#利用反射获取类文件以及其中的方法&属性 并获取类及方法上的特性

    了解C#特性类并声明我们自己的特性类[AttributeTest]代码如下 using System; namespace AttributeTest { /* 特性说明 特性本质是一个继承和使用了系 ...

  5. Java SE学习笔记 --->高级类特性 ---> toString() 方法

    概述: toString() 方法在面向对象当中十分常见,使用频率很高,和equals() 方法一样,也是Object类中定义的方法. jdk中 源码: java.lang.Object类中ToStr ...

  6. [C#]Attribute特性(2)——方法的特性及特性参数

    上篇博文[C#]Attribute特性介绍了特性的定义,类的特性,字段的特性,这篇博文将介绍方法的特性及特性参数相关概念. 3.方法的特性 之所以将这部分单列出来进行讨论,是因为对方法的特性查询的反射 ...

  7. Android开发中,那些让您觉得相见恨晚的方法、类或接口

    Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...

  8. 如何在方法上贴上attribute(特性)捕捉方法的异常,来实现我们的需求

    在方法上贴上attribute(特性)捕捉方法的异常,其实这么做也是为了在项目中不会大量使用try-cacth这样的语句,同时使我们的代码看起来更简洁,更直观,将逻辑业务分离使得后期维护方便.这里我们 ...

  9. 【前端基础系列】slice方法将类数组转换数组实现原理

    问题描述 在日常编码中会遇到将类数组对象转换为数组的问题,其中常用到的一种方式使用Array.prototype.slice()方法. 类数组对象 所谓的类数组对象,JavaScript对它们定义为: ...

随机推荐

  1. CSS与jQuery补漏

    1.position属性 这个属性定义建立元素布局所用的定位机制.任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素本身是什么类型.相对定位元素会相对于它在正常流中的默认位置偏移. ...

  2. Replication--使用备份初始化订阅--推送订阅

    1. 修改发布属性"许从备份文件初始化"置为TRUE2. 备份数据库并在订阅服务器上还原3. 创建订阅 -------------------------------------- ...

  3. JulyNovel-React

    写在前面的话 目前,JulyNovel后端框架基本搭建.部署完毕,GraphQL提供的API接口也有着高可用性,数据库里也存了六七百兆爬来的小说数据,是时候开始写前端了. 框架选用 JulyNovel ...

  4. JAVA程序对MYSQL数据库加锁实验

    什么是脏读,不可重复读,幻读 1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重 ...

  5. 二十六、Nodejs 操作 MongoDb 数据库

    一. 在 Nodejs 中使用 Mongodb 前面的课程我们讲了用命令操作 MongoDB,这里我们看下如何用 nodejs 来操作数据库需要引包: npm install mongodb --sa ...

  6. KVM虚拟化之windows虚拟机性能调整

    通过KVM安装WindowsXP/2003/7/2008操作系统后,由于默认的磁盘驱动(IDE)性能与网卡驱动(RTL8139100M)的性能都极其低下,需要调整,通过加载Redhatvirtio驱动 ...

  7. 【maven】---初识

    前言 最近在研究自动化测试,其中的一个研究点儿就是maven,去download了一本书,看了看.下面是自己的从书中摘录的一些关于maven的概念性的东西. 内容 maven是什么? Maven是一个 ...

  8. threading.local()方法;线程池

    一,threading.local() import time import threading v = threading.local() def func(arg): # 内部会为当前线程创建一个 ...

  9. nginx处理高并发请求强于apache

    ginx 不同于 Apache2 的一点就是,Nginx 采用单线程,非阻塞,异步 IO 的工作模型. Apache2 对于每一个请求,都会创建一个新进程或线程,会浪费很多内存和 CPU 时间,而 N ...

  10. executeQueryForObject returned too many results.

    //错误位置: 这个错误出现在持久层与数据库交互时,原因是 queryForObject这个方法封装唯一值,但是给出的sql语句返回了多个值 public int getListCount(SqlMa ...