C# 如何反射获取常量值

news/2024/5/19 6:59:09 标签: c#, 开发语言, 反射, 常量

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

        但是需要传入的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.niftyadmin.cn/n/5145121.html

相关文章

Eureka介绍和使用

Eureka介绍和使用 一、基本介绍1. Eureka是什么?2. Eureka的作用3. 常用使用场景4. Eureka的工作原理5. Eureka的优点6. 使用Eureka的注意事项 二、eureka配置项解释1. eureka.instance.hostname2. eureka.instance.appname3. eureka.instance.instance-id4. eureka.client.se…

【JS】Chapter7-Dom 事件基础

站在巨人的肩膀上 黑马程序员前端JavaScript入门到精通全套视频教程,javascript核心进阶ES6语法、API、js高级等基础知识和实战教程 (七)Dom 事件基础 1. 事件监听(绑定) 1.1 事件监听 什么是事件? 事件…

如何从嘉立创下单一个PCB打板(免费)

文章目录 设计PCB下单制作PCB领取优惠券 设计PCB 由于我刚接触PCB设计,并不会自己设计,因此直接选择了一个开源硬件平台中的一个项目进行下载,下载链接如下: ESP32管灯熊猫 - 嘉立创EDA开源硬件平台 (oshwhub.com) 根据其中的视…

一道简单的C#面试题

试题: 抽顺序问题:有10位面试者,需要随机抽号面试。 1)总共十个号数,用数组表示; 2)每一位面试者输入1开始抽签,然后得到抽签号,输入2结束抽签; 3&#x…

网工内推 | 大专以上,福利待遇好,IE认证优先(云厂商)

01 主动脉科技有限公司 招聘岗位:网络工程师 职责描述: 1.负责云计算,IDC,BGP网络,通过团队协作,构建云业务后台技术支持服务体系。 2.通过工单、其他通讯工具等线上方式完成对客户的实施售后支持&#x…

人工智能基础_机器学习013_三种梯度下降对比_线性回归梯度下降更新公式_对梯度下降函数求偏导数_得到---人工智能工作笔记0053

这里批量梯度下降,就是用准备的所有样本数据进行梯度下降计算. 然后小批量梯度下降就是使用比如我一共有500个样本,那么我从中拿出50个样本进行梯度下降计算. 然后随机梯度下降,更厉害, 从一共有500个样本中,随机的取一个样本进行梯度下降计算, 首先我们看批量梯度下降,使用…

为什么开设项目管理专栏

首先,向各位同道同行,分享一个来自博主的好消息: 2023年8月,经过一次为期3个月的紧张、有序、活泼、生动的学习之旅,博主顺利通过了PMP认证,并且拿下3A。 其次,为记录本次学习过程的点滴和心得…

RT-Thread 9. VS2012下仿真RT-Thread 和LVGL

1. 在ENV中添加组件 2. 下载组件 3. 生成代码 4. 打开代码 双击project.vcxproj 编译 5. 运行