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

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. Linux RPM学习笔记

    RPM(RedHat Package Manager) rp-pppoe-3.1-5.i386.rpm软件名称-版本号-编译次数-适合的硬件平台.扩展名 xxx-devel.rpm开发使用 xxx.n ...

  2. [LeetCode 题解]: Two Sum

    前言   [LeetCode 题解]系列传送门:  http://www.cnblogs.com/double-win/category/573499.html   1.题目描述 Given an a ...

  3. 一个自定义MVP .net框架 AngelFrame

    摘要:本篇是本人在完成.net平台下一个项目时,对于MVP框架引发的一些思考,以及开发了一个小型的配置型框架,名字叫作AngelFrame.这个项目属于前端桌面管理系统的一部分,最终要集成进去. 关键 ...

  4. mysql中判断记录是否存在方法比较【转】

    把数据写入到数据库的时,常常会碰到先要检测要插入的记录是否存在,然后决定是否要写入. 我这里总结了判断记录是否存在的常用方法: sql语句:select count(*) from tablename ...

  5. 小修改,让mvc的验证锦上添点花(1)

    首先,mvc的客户端验证用的是jquery.validate.js, jquery.validate本身已经提供了很好的扩展功能,通过简单点配置就可以做得更好看些. 而Microsoft通过jquer ...

  6. WPF MaterialDesignInXamlToolkit锁屏恢复后页面冻结的问题

    在做WPF项目时,用到 MaterialDesignInXamlToolkit 开源项目.结果客户用的时候发现这个问题,锁屏后,界面不刷新. 如果不用MaterialDesign,测试后不会出现这个问 ...

  7. codeforces|CF13C Sequence

    大概的题意就是每次可以对一个数加一或者减一,然后用最小的代价使得原序列变成不下降的序列. 因为是最小的代价,所以到最后的序列中的每个数字肯定在原先的序列中出现过.(大家可以想一下到底是为什么,或者简单 ...

  8. 十九、Node.js-非阻塞IO、异步以及 '事件驱动EventEmitter'解决异步

    1.Nodejs 的单线程 非阻塞 I/O 事件驱动 在 Java.PHP 或者.net 等服务器端语言中,会为每一个客户端连接创建一个新的线程而每个线程需要耗费大约 2MB 内存.也就是说,理论上, ...

  9. Ubuntu16.04实用python脚本 - JDK的配置!

    前提已经把Oracle JDK解压缩到指定目录了,我的JDK目录是:“/usr/jdk1.8.0_121” 全部脚本: # coding=utf-8 ,中文注释需要加入编码格式 #这是我的测试文件,在 ...

  10. 在通知栏上玩游戏,Steve iOS 游戏实现思路

    最近有一款游戏特别的火爆,叫做Steve ,一种可以在通知中心直接玩的游戏.作者的脑洞也是非常的大,实在让人佩服.其实实现起来也简单,就是用到了iOS8新特性 app extension(Today ...