C# - 内部属性在快速观察中“可读”但不使用反射?

2023-12-06

我看到“快速监视”窗口可以访问所有属性,无论库中类的访问限制(内部、受保护、私有)如何,即使在完全不同的应用程序、库和命名空间中引用该库也是如此。然而我没有找到使用“反射”访问这些的方法。我特别尝试“读取”(注意 - 只是读取)程序集的内部属性。如果通过“内部”工作方式的设计不可能做到这一点(在同一名称空间之外无法访问),那么为什么它会被 VS.NET 中的“快速监视”窗口“读取”呢?

这是我使用的示例代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TestLib
{
    public class TestInteralProp
    {
        internal string PropertyInternal
        {
            get { return "Internal Property!";  }
        }

        protected string PropertyProtected
        {
            get { return "Protected Property!"; }
        }

        string PropertyPrivate
        {
            get { return "Private Property!"; }
        }

        public string PropertyPublic
        {
            get { return "Public Property!";  }
        }

        protected internal string PropertyProtectedInternal
        {
            get { return "Protected Internal Property!"; }
        }
    }
}

当我为 TestInernalProp 类创建对象时,我可以在 Quickwatch 中看到所有 4 个属性 -

props

当我使用反射访问除公共属性 (PropertyPublic) 之外的任何这些属性时,我收到空引用异常。

//this works
propTestObj.GetType().InvokeMember("PropertyPublic", System.Reflection.BindingFlags.GetProperty, null, propTestObj, null);
//this fails (obviously)
propTestObj.GetType().InvokeMember("PropertyInternal", System.Reflection.BindingFlags.GetProperty, null, propTestObj, null);

//this works
propTestObj.GetType().GetProperty("PropertyPublic").GetValue(propTestObj, null);
//this fails again
propTestObj.GetType().GetProperty("PropertyInternal").GetValue(propTestObj, null)

我不清楚“快速观看”如何访问这些内容。


使用这些标志

BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance

The GetProperty此操作不需要标志。您可能想添加Static以及。

注意:您可以将标志与|,因为它们的整数值是 2 的幂。看这个答案.


NOTE(回应Lalman和shanks关于Reflection安全问题的担忧)

总有一种方法可以编写出糟糕或危险的代码。做或不做取决于你。反射不是常规的做事方式,而是用于特殊工具的编程,例如 o/r-mappers 或分析工具。反思的力量非常强大;但是,您应该明智地使用它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 内部属性在快速观察中“可读”但不使用反射? 的相关文章

随机推荐

  • 如何对相机图像应用效果?

    我们如何将棕褐色滤镜等效果应用于相机图像 在此网址中了解基本想法http www riagora com 2010 07 android air and the camera 然后参考android Graphics 它可以帮助您了解Blu
  • 进行媒体查询的最佳方式[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 在 HTML 中放置媒体查询的最佳方式是什么 在同一个 CSS 文件中 例如 my text font size 30px media only screen and max width
  • 使 GridView 页脚在没有数据绑定时可见

    当gridview中没有数据时如何显示页脚以从页脚插入数据 最简单的方法是绑定一个长度为 1 的数组 您可以在其中添加任何您喜欢的内容来标识这是一个虚拟行 在 GridViews RowDataBound 方法中检查数据项是否为虚拟行 在尝
  • PHP:使用外部数据执行 ORDER BY?

    嘿大家 长话短说 如果您不介意向这位 PHP 新手伸出援手的话 我有一个名为 类别 的数据库字段 其中存储了以下内容 Fruit People Place Animals Landscape 我在数据库中还有一个单独的表 其中每个项目的字段
  • Mac OS 上的 Java 随机变慢

    我有一个 Java 程序 用于跨多个处理器进行一组科学计算 方法是将其分成多个部分并在不同的线程中运行每个部分 该问题是可以简单划分的 因此线程之间不存在争用或通信 他们访问的唯一公共数据是一些不需要同步访问的共享静态缓存 以及硬盘驱动器上
  • 使用批处理文件修改文件内容

    我需要创建一个批处理文件 使用它我们可以修改文件的内容 例如 Testing txt 文件包含一行 描述 MAN Human 改成 描述 MAN Human V2 仅在 MAN 末尾添加 V2 因此 当我们打开文件时 我们会看到描述名称 M
  • 如何在Spacy中为OOV术语指定词向量?

    我有一个预训练的 word2vec 模型 我将其加载到spacy对新单词进行矢量化 给定我执行的新文本nlp hi vector获取单词 hi 的向量 最终 需要对一个新单词进行向量化 该新单词不存在于我的预训练模型的词汇表中 在这种情况下
  • ASP.NET4 画布应用程序:回发导致意外重定向

    我正在使用工具包的 build 5 06 我才刚刚开始 尝试做一些简单的事情 让回发工作 但是 当用户单击回发按钮时 浏览器会快速重定向到某个内容 我认为是 uiserver 然后再次重定向到 facebookredirect axd 最后
  • Google App Engine 原子部分?

    假设您从数据存储中检索一组记录 类似于 select from MyClass whereserved false 我如何确保另一个用户没有设置保留仍然为假 我查看了事务文档 并对谷歌的解决方案感到震惊 该解决方案是捕获异常并在循环中重试
  • 使用 Google Identity Services (GIS) JavaScript SDK,如何扩展会话?

    per https developers google com identity oauth2 web reference js reference 似乎没有一个refresh token流动 过期时间是1小时 所以并不可怕 但我想在用户仍
  • Clearcase 和 java 进程:更改视图不适用

    我有一个简单的应用程序 它接收用户输入的 CC 流名称 并假设从该流存储库返回特定文件的内容 我尝试使用一个简单的 shell 脚本来执行此操作 用户输入流名称 java接收流名称 运行一个进程 该进程运行一个脚本 myccscript s
  • “无法找到主类”

    我尝试从命令提示符运行示例 Java 应用程序 但收到以下错误 Exception in thread main java lang NoClassDefFoundError com badlogic gdx helloworld Hell
  • Objective-C 序列化复杂对象列表

    我有一个类列表 如下所示 interface AISlideItem NSObject NSString PlaceHolderName NSUInteger PlaceHolderID property nonatomic strong
  • OpenJPA 与 Glassfish 配合得很好吗?

    有人成功地将 OpenJPA 与 Glassfish 结合使用吗 我正在尝试将 OpenJPA 2 1 与 Glassfish 3 1 开源一起使用 我已按照此处的说明将两者集成 gt http weblogs java net blog
  • 如何在编译时确定元组元素的偏移量?

    我需要确定元组中某个索引元素的偏移量compile time 我尝试了这个功能 复制自https stackoverflow com a 55071840 225186 接近尾声 template
  • 对文件夹中的所有文件执行命令

    我想对目录中的所有文件运行命令 对于 c conversion ajt 中的 1 执行以下操作转换命令 1 2 但是 我需要一个与输入相同但具有不同文件扩展名的输出文件名 asciitojt exe filename1 ajt filena
  • 在 mutate() 中使用列函数的变量

    我如何使用变量来代替列名在 dplyr 字符串中 举个例子 我想向 iris 数据集添加一列 称为 sum 它是 Sepal Length 和 Sepal Width 的总和 简而言之 我想要以下代码的工作版本 x Sepal Length
  • Python str() 双引号字符串

    我知道这个问题听起来很幼稚 但我还是坚持下去 我正在使用 jquery 自动完成 结果发现它需要 data1 data2 形式的列表 我正在从 json 文件获取数据并且 data json load fobj content data s
  • PHP 作曲家 HTTPS 错误 1416F086。证书验证失败

    我突然在使用 PHP Composer 时遇到了这个令人讨厌的 HTTPS 错误 而 Composer 曾经在我的机器上工作 Github 和 stackoverflow 上已经有存在相同问题的主题 我尝试了所有推荐的东西 但没有任何对我有
  • C# - 内部属性在快速观察中“可读”但不使用反射?

    我看到 快速监视 窗口可以访问所有属性 无论库中类的访问限制 内部 受保护 私有 如何 即使在完全不同的应用程序 库和命名空间中引用该库也是如此 然而我没有找到使用 反射 访问这些的方法 我特别尝试 读取 注意 只是读取 程序集的内部属性