C#如何取出非公共成员
https://blog.csdn.net/yueguangzhiyuan/article/details/8926131
一般而言,非公共成员是受保护的,不能被外部访问的,这些都是基于安全性考虑。可是有时,我们很想取到非公共成员的某个对象。那我们就得用到两个方法:
GetType().GetField();
GetType().GetProperty();
GetField()用来获取字段,GetProperty()用来获取属性。
————————————————
版权声明:本文为CSDN博主「Hi-Jimmy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yueguangzhiyuan/article/details/8926131
示例:
如图,我要获取_row和Row的值。
protected void GV_Event_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "gvwEventLinkButton")
{
//_row 前面蓝色小图标,是变量(字段), 他是私有成员
//Row 前面白色小图标,是属性 ,他是保护乘员(白色图标上有个H的区域)
//是字段还是属性,根据命名也能看出来
//根据调试时查看,Row类型是GridViewRow
GridViewRow row = null;
System.Reflection.FieldInfo fRow = e.GetType().GetField("_row", BindingFlags.Instance | BindingFlags.NonPublic);
row = fRow.GetValue(e) as GridViewRow;
int rowIndex = row.RowIndex;
GridViewRow row2 = null;
System.Reflection.PropertyInfo pRow = e.GetType().GetProperty("Row", BindingFlags.Instance | BindingFlags.NonPublic);
row2 = pRow.GetValue(e, null) as GridViewRow;
int rowIndex2 = row2.RowIndex;
//如果RowIndex仍然是非公成员,可以同理对row进行反射操作
}
}
深入:
如图,两者都有相似的参数类型,可以只输入要搜索的Name参数,也可以额外加入负责搜索执行方式的参数BindingAttr。
BindingAttr的参数大体如下(来自MSDN):
指定 BindingFlags.Public 可在搜索中包含公共字段。
指定 BindingFlags.NonPublic 可在搜索中包含非公共字段(即私有字段、内部字段和受保护的字段)。
指定 BindingFlags.FlattenHierarchy 以便沿层次结构向上包括public 和protected 静态成员;不包括继承类中的private 静态成员。
BindingFlags.IgnoreCase,表示忽略name 的大小写。
BindingFlags.DeclaredOnly,表示仅搜索在Type 上声明的字段,而不搜索简单继承的字段。
————————————————
版权声明:本文为CSDN博主「Hi-Jimmy」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yueguangzhiyuan/article/details/8926131
C#如何取出非公共成员的更多相关文章
- Newtonsoft.Json高级用法 1.忽略某些属性 2.默认值的处理 3.空值的处理 4.支持非公共成员 5.日期处理 6.自定义序列化的字段名称
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- java static成员变量方法和非static成员变量方法的区别
这里的普通方法和成员变量是指,非静态方法和非静态成员变量首先static是静态的意思,是修饰符,可以被用来修饰变量或者方法. static成员变量有全局变量的作用 非static成员变量则 ...
- 【C#】让ReSharper灰色显示未使用的非私有成员的关键
环境:VS2010+ReSharper8 先说答案: 1.在Inspection Severity中设置Non-private accessibility为Warning.如图: 该页面在ReShar ...
- C++_static与非static成员(函数)
static与非static成员(函数) <C++ Primer>第4版399页: 对于特定类类型的全体对象而言,访问一个全局变量有时是必要的.然而,全局变量会破坏封装:对象需要支持特定 ...
- javaScript事件(四)event的公共成员(属性和方法)
一.事件 二.事件流 以上内容见:javaScript事件(一)事件流 三.事件处理程序 四.IE事件处理程序 以上内容见javaScript事件(二)事件处理程序 五.事件对象 以上内容见javaS ...
- gerrit设置非小组成员禁止下载代码
对gerrit有所了解的同学,都知道gerrit 是我们常用的一个来做代码审核的工具,其中的权限管理,是一个非常重要的环节,关于每个权限的使用范围,可以参考博客https://blog.csdn.ne ...
- 为什么const对象只能调用const成员函数,而不能调用非const成员函数?
在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理. 假设有一个类,名字为test代码如下: clas ...
- 怎么在const成员函数里面调用非const成员函数?
举个例子: 定义了一个类的const实例,怎么让他也能调用非能调用非const成员函数class foo{public:void test1() {cout << "I am n ...
- 关于C++中的非静态类成员函数指针
昨天发现了一个问题,就是使用对类中的非静态成员函数使用std::bind时,不能像普通函数一样直接传递函数名,而是必须显式地调用&(取地址),于是引申出我们今天的问题:非静态类成员函数指针和普 ...
- C++中的Thunk技术 / 非静态类成员函数作为回调函数 的实现方法
原文:https://blog.twofei.com/616/ 用我的理解通俗地解释一下什么是C++中的Thunk技术吧! Thunk技术就是申请一段可执行的内存, 并通过手动构造CPU指令的形式来生 ...
随机推荐
- 2. RabbitMQ 的详细安装步骤(两种方式,第一种:yum 安装;第二种:docker 容器安装)
2. RabbitMQ 的详细安装步骤(两种方式,第一种:yum 安装:第二种:docker 容器安装) @ 目录 2. RabbitMQ 的详细安装步骤(两种方式,第一种:yum 安装:第二种:do ...
- 最爱lx-music的音源哪里去了?
最爱lx-music,让你满心喜欢,可是音源没有了,因为被投诉给全部关了. 公心作者增加了自定义源. 六音提供了音源,做了一件大善事.注意的是音源会一直初始化.那就下载适合的版本: 欣赏阿鲁阿卓如痴如 ...
- Windows体验-注册表
打开方式中关闭在应用商店查找关联应用 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Explorer NoUseStoreOpenWit ...
- 基于MCP实现text2sql
目的:基于MCP实现text2sql能力 参考:https://blog.csdn.net/hacker_Lees/article/details/146426392 服务器 选用开源的MySQL M ...
- 腾讯出品!这款Markdown神器让你码字效率翻倍,双模式编辑太香了!
嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 由腾讯开源的CherryMarkdown编辑器,集思维导图式大纲写作与专业分屏模式于一身,支 ...
- 【笔记】reko 0.10.2 反编译工具安装和使用记录|(2) 翻译 user‘s guide
Reko user's guide Reko是一个二进制可执行文件的反编译器.它接受输入的一个或多个二进制可执行文件,然后反编译成高级语言.它可以在GUI shell中被交互地使用,作为一个命令行项目 ...
- N+1查询:数据库性能的隐形杀手与终极拯救指南
title: N+1查询:数据库性能的隐形杀手与终极拯救指南 date: 2025/05/06 00:16:30 updated: 2025/05/06 00:16:30 author: cmdrag ...
- 远程服务器(腾讯云轻量服务器)上安装SQL Server以及SQL Server Management Studio,以及EFCore对其的连接
SQL Server的安装 下载地址:https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 安装教程参考:https://bl ...
- Django踩坑之django.core.exceptions.ImproperlyConfigured mysqlclient 1.3.13 or newer is required; you have 0.9.3.
安装Django3后不想折腾mysqlclient那堆库文件,直接装了pymysql替代mysqlclient,报错:django.core.exceptions.ImproperlyConfigur ...
- 将Spring Boot项目部署到自己的服务器上
第一步: 先准备好MobaXterm,链接上服务器后进入宝塔面板 https://www.bt.cn/new/download.html 找到Linux面板安装脚本复制命令 第二步: 进入MobaXt ...