C# 如何反射获取常量值

news2024/12/22 19:22:42

        首先,常量是一个字段,所以需要从字段中获取该值。

        但是需要传入的BindingFlags是什么,与其盲猜,不如直接反射所有字段值,查看其中的常量有哪些特性和bool值来判断。

...
 static void Main(string[] args)
 {
     var type = typeof(CCCC);
     var fields = type.GetFields(BindingFlags.Public |  BindingFlags.Static);
 }

 public class CCCC
 {
     public const int A = 2;
     public static readonly int B = 3;
     public static int C = 4;
 }
...

在获取fields后打上断点,可得到如下结果

截图过大,截取部分

字段A:

字段B:

字段C:

对比上述图可知,

常量的BindingFlags特性依然是Public|Static,字段特性(FieldAttributes)为Public|Static|Literal|HasDefault,且field.IsLiteral为true,这个属性表示是否在编译时确定值且后续不可改变,因此可以通过字段特性来确定该字段是否为常量;

常规静态变量则仅有Public|Static(不论是BindingFlags还是FieldAttributes);

而静态只读变量,则在FieldAttributes中额外多一段InitOnly标记。

综上所述,要获取常量字段,则可以直接通过反射静态字段的方式获取字段后,判断是否有Literal特性,则可以返回值,伪代码如下

public static FieldInfo GetConstantField(Type type, string fieldName)
{
    var field = type.GetField(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static);
    if (field.Attributes.HasFlag(FieldAttributes.Literal | FieldAttributes.HasDefault))
    {
        return field;
    }
    return null;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1153326.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

禁止使用Lombok,在Lombok的加持下,“小狗”.equals(“老狗”) = true

目录 一、禁止使用Lombok1、jdk版本问题2、被迫营业3、可读性差 二、Lombok中的真实小坑三、看看编译后的代码,到底怎么回事1、编译class2、添加一个注解EqualsAndHashCode(callSuper true) 大家好,我是哪吒。 一、禁止使用Lombok 我有一个同学&#…

VASSAL 3.7.4 发布,开源棋牌游戏构建引擎

导读VASSAL Engine 3.7.4 版本现已发布。VASSAL 是一个游戏引擎,用于在线构建棋盘游戏和纸牌游戏,构建的游戏可在 Internet 上或通过电子邮件实时运行。 VASSAL Engine 可在所有平台上运行,是免费的开源软件。具体更新内容包括: …

【2024版】最新Nessus工具安装激活教程,三分钟手把手教会,非常简单!收藏这一篇就够了

Nessus工具介绍 Nessus号称是世界上最流行的漏洞扫描程序,而且它开源,全世界有超过75000个组织在使用它。该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库。Nessus不同于传统的漏洞扫描软件,Nessus可同时在本机或远端上…

护眼灯亮度多少合适?适合学生儿童的护眼灯推荐

为什么需要购买台灯?正常的顶灯不行吗? 正常顶灯的光照射到桌子上时,已经发散的差不多了,无法满足看书写字环境下的需要。 看书写字时人是要低头的,很容易挡住顶灯照射的光,桌上需要光的位置正好被挡住。…

如何为模型添加光照效果?

1、光照贴图的原理 光照贴图(Lightmap)是一种用于模拟光照效果的贴图技术。它通过将场景中的光照信息渲染到纹理图像中,然后将其应用到模型表面来实现对光照效果的模拟。光照贴图通常使用灰度图像来表示场景中的光照信息,白色表示…

让GPT替我写vue3代码,看的我血压升高

事情是这样子的,最近在写Vue3相关的代码,就想着能不能让GPT辅助我写代码,于是,我就先写了一个中文的prompt Prompt1: 使用vue3写一个用户登录的页面 分割线内部是GPT的回答: 使用 Vue 3 来创建一个用户登录页面需要涉…

编译源码时报错,程序包找不到

在编译源码时,出现了个问题,程序包找不到 原本这里是没有这个浮标的,无法打开点击,里面是空的,打开本地maven的库看找到相应的包也是没有问题的。 这里我尝试过删除相关文件,删除pom文件相关内容再次进行下…

Python数据可视化入门指南

Matplotlib和Plotly是两个在Python中广泛使用的数据可视化库,它们具有丰富的API和功能,用于创建各种类型的图表和图形。在本篇博客中,我们将介绍它们的主要特点和基本用法。 Matplotlib 主要特点: 高度自定义: Matp…

赋能制造业高质量发展,释放采购数字化新活力——企企通亮相武汉2023国际智能制造创新论坛

摘要 “为应对成本上升、供应端不稳定、供应链上下游协同困难、决策无数据依据等问题,利用数字化手段降本增效、降低潜在风险十分关键。在AI等先进技术发展、供应链协同效应和降本诉求等机遇的驱动下,采购供应链数字化、协同化成为企业激烈竞争的优先选…

Echats-自定义图表1

效果图&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"zh-cmn-Hans"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>…

设置防火墙

1.RHEL7中的防火墙类型 防火墙只能同时使用一张,firewall底层调用的还是lptables的服务: firewalld:默认 &#xff0c;基于不同的区域做规则 iptables: RHEL6使用&#xff0c;基于链表 Ip6tables Ebtables 2.防火墙的配置方式 查看防火墙状态: rootlinuxidc -]#systemct…

计算机视觉 计算机视觉识别是什么?

计算机视觉识别&#xff08;Computer Vision Recognition&#xff09;是计算机科学和人工智能领域中的一个重要分支&#xff0c;它致力于使计算机系统能够模拟和理解人类视觉的过程&#xff0c;从而能够自动识别、分析和理解图像或视频中的内容。这一领域的发展旨在让计算机具备…

原生JS 表格列拖拽 适用JqGrid

js $(function () {var d1 new dragTable();d1.init({tabel: .drag-table}); })function dragTable() {this.disX 0; // 相对按下的位置移动的距离this.outX 0; // 鼠标按下的点到大盒子边上的距离this.lanX 0; // 拖动到的位置this.$createDiv null;this.$createDivBg …

Java面向对象(进阶)特征之二:继承性

文章目录 一、继承的概述&#xff08;1&#xff09;生活中的继承&#xff08;2&#xff09; Java中的继承1、角度一&#xff1a;从上而下2、角度二&#xff1a;从下而上 &#xff08;3&#xff09;继承的好处&#xff08;4&#xff09;总结 二、继承的语法与应用举例&#xff0…

vue3引入并加载unity工程的两种方式

1、使用unity-webgl插件 npm i unity-webglunity打包后的build文件夹是这样的 需要手动删除.unityweb这个后缀&#xff0c;完成后放在vue3项目的根目录下的public文件夹下。 下面是引入unity的vue组件,其中实例化UnityWebgl时的参数地址直接引用上面的对应文件地址 <scri…

Soul CEO张璐团队创新技术与用户共建,推动网络社交空间绿色发展

近年来,随着互联网社交成为青年人交友的主要方式之一,网络黑灰产业也随之蓬勃发展,新型网络犯罪层出不穷,给用户的安全带来了巨大挑战。为了维护用户的社交安全,国家相关部门不断开展着"净网"、"清朗"等专项行动。在这个背景下,Soul App的CEO张璐及其团队积…

一招教你,如何快速搭建属于自己的AI数字人直播系统!

随着AI技术的不断发展&#xff0c;AI数字人直播系统成为了直播行业的新宠。本文将向大家介绍如何在短时间内快速搭建AI数字人直播系统&#xff0c;并寻找合适的服务商进行OEM合作&#xff0c;为用户带来全新的直播体验。 这边有2种方法你可以选择代理加盟可靠的AI数字人直播系统…

【Java 进阶篇】Java BeanUtils 使用详解

Java中的BeanUtils是一组用于操作JavaBean的工具&#xff0c;它允许你在不了解JavaBean的具体内部结构的情况下&#xff0c;访问和修改其属性。本文将详细介绍Java BeanUtils的使用&#xff0c;包括如何获取和设置JavaBean的属性&#xff0c;复制属性&#xff0c;以及如何处理嵌…

VS Code 全局搜索代码变量名时,有些文件中有这个变量但是没有被搜索到的问题

可以打开visual studio code&#xff0c;打开文件->首选项->设置&#xff0c;去掉 Use Ignore Files 这个选项。

FL Studio21.2中文版终身免费更新

FL Studio水果音乐编曲软件中文版,一款强大的音乐制作软件,可以进行音乐编曲、剪辑、录音、混音。FL Studio中文官网提供各个版本编曲软件的正版购买与下载和众多编曲软件教程。 FL Cloud 音效库包含开放版权的Loop和采样&#xff0c;以及来自 FL Studio 著名用户的艺术家独家…