使用私有构造函数实例化内部类

2024-02-26

我正在尝试使用反射来创建类的实例。但它是内部密封的并且有私有构造函数。我想知道如何初始化它,并且作为框架的一部分,我只能使用反射将其取出?

internal sealed class ABC
{
    private ABC(string password){}
    public static ABC Create(string password){};
}

添加: System.ServiceModel.Channels.SelfSignedCertificate 是我尝试使用的内部类


编辑:我没有注意到您提到您尝试初始化的类型是.NET 框架的一部分。我以为这是你自己的类型之一,只是从其他地方引用的。

我强烈敦促你不要尝试这个。 Microsoft 完全可以自由地在框架版本之间更改或删除内部类 - 如果您依赖这样的实现细节,您的代码将非常脆弱。

更改您的设计以避免需要这样做。


原答案:

是的,你必须使用反射 - 像这样:

using System;
using System.Reflection;

internal sealed class ABC
{
    private ABC(string password)
    {
        Console.WriteLine("Constructor called");
    }
}

public class Test
{
    static void Main()
    {
        ConstructorInfo ctor = typeof(ABC).GetConstructors
            (BindingFlags.Instance | BindingFlags.NonPublic)[0];

        ABC abc = (ABC) ctor.Invoke(new object[] { "test" });
    }
}

请注意,以这种方式违反访问修饰符需要ReflectionPermissionFlag.MemberAccess允许。如果你知道会有一个名为的静态方法Create,你最好调用that通过反射:

using System;
using System.Reflection;

internal sealed class ABC
{
    private ABC(string password)
    {
        Console.WriteLine("Constructor called");
    }

    public static ABC Create(string password)
    {
        return new ABC(password);
    }
}

public class Test
{
    static void Main()
    {
        MethodInfo method = typeof(ABC).GetMethod("Create",
            BindingFlags.Static | BindingFlags.Public);

        ABC abc = (ABC) method.Invoke(null, new object[]{"test"});
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用私有构造函数实例化内部类 的相关文章

  • 无法使用 strptime() 获取秒数

    我收到 YYYY MM DDThh mm ss S Z hh mm 这种格式的日期时间 我正在尝试使用复制该值strptime如下所示 struct tm time 0 char pEnd strptime datetime Y m dT
  • ROWNUM 的 OracleType 是什么

    我试图参数化所有现有的 sql 但以下代码给了我一个问题 command CommandText String Format SELECT FROM 0 WHERE ROWNUM lt maxRecords command CommandT
  • 在 LINQ 查询中返回不带时间的日期

    我正在编写一个查询 我想计算按日期联系我们的呼叫中心的次数 看起来很简单 但由于联系日期字段是日期时间字段 我得到了时间 因此当我按联系日期 时间 分组时 每个联系日期实例的计数为 1 所以 我想只按日期分组 而不按时间分组 下面是我用来查
  • FFMPEG Seeking 带来音频伪影

    我正在使用 ffmpeg 实现音频解码器 在读取音频甚至搜索已经可以工作时 我无法找到一种在搜索后清除缓冲区的方法 因此当应用程序在搜索后立即开始读取音频时 我没有任何工件 avcodec flush buffers似乎对内部缓冲区没有任何
  • 跨多个控件共享事件处理程序

    在我用 C 编写的 Windows 窗体应用程序中 我有一堆按钮 当用户的鼠标悬停在按钮上时 我希望按钮的边框发生变化 目前我有以下多个实例 每个按钮一个副本 private void btnStopServer MouseEnter ob
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • 当 Cortex-M3 出现硬故障时如何保留堆栈跟踪?

    使用以下设置 基于 Cortex M3 的 C gcc arm 交叉工具链 https launchpad net gcc arm embedded 使用 C 和 C FreeRtos 7 5 3 日食月神 Segger Jlink 与 J
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 更改窗口的内容 (WPF)

    我创建了一个简单的 WPF 应用程序 它有两个 Windows 用户在第一个窗口中填写一些信息 然后单击 确定 这会将他们带到第二个窗口 这工作正常 但我试图将两个窗口合并到一个窗口中 这样只是内容发生了变化 我设法找到了这个更改窗口内容时
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • 检查 url 是否指向文件或页面

    我们需要以下内容 如果文件确实是文件 则从 URL 下载该文件 否则 如果它是一个页面 则什么也不做 举个简单的例子 我有以下命令来下载文件 My Computer Network DownloadFile http www wired c
  • 作为字符串的动态属性名称

    使用 DocumentDB 创建新文档时 我想设置属性名称动态地 目前我设置SomeProperty 像这样 await client CreateDocumentAsync dbs db colls x new SomeProperty
  • 方法参数内的变量赋值

    我刚刚发现 通过发现错误 你可以这样做 string s 3 int i int TryParse s hello out i returns false 使用赋值的返回值是否合法 Obviously i is but is this th
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 如何连接字符串和常量字符?

    我需要将 hello world 放入c中 我怎样才能做到这一点 string a hello const char b world const char C string a hello const char b world a b co
  • 不同类型的指针可以互相分配吗?

    考虑到 T1 p1 T2 p2 我们可以将 p1 分配给 p2 或反之亦然吗 如果是这样 是否可以不使用强制转换来完成 或者我们必须使用强制转换 首先 让我们考虑不进行强制转换的分配 C 2018 6 5 16 1 1 列出了简单赋值的约束

随机推荐

  • 科尔多瓦蓝牙音箱没有声音

    我正在开发一个 Android 和 IOS 应用程序 该应用程序可以毫无问题地播放音频消息 我的问题如下 如果手机已经连接到蓝牙 启用并连接蓝牙 然后我启动应用程序并播放音频文件 在这种情况下 我在电话和蓝牙扬声器上都听不到任何声音 但是
  • Hadoop中数据是如何分割的

    Hadoop是否根据程序中设置的mapper数量来分割数据 也就是说 有一个大小为 500MB 的数据集 如果 Mapper 的数量为 200 个 假设 Hadoop 集群允许同时存在 200 个 Mapper 那么每个 Mapper 是否
  • 反应本机 UIExplorer 无法打开

    我正在尝试在 Xcode 上查看 UIExplorer 我已经按照这个例子做了 应该很简单 它说克隆react native cd到目录 npm install并运行npm start 但是 当我运行 npm start 时 出现以下错误
  • Python 类内的 main 调用

    我没有做过太多Python工作 来自C Java背景 所以请原谅我问这么一个简单的问题 我在 Eclipse 中使用 Pydev 来编写这个简单的程序 我想要它做的就是执行我的 main 函数 class Example if name m
  • Typo3 CKEditor 图片来自 FAL

    我使用 CKEditor 设置了全新的 TYPO3 8 7 4 安装 并且rte ckeditor image从 FAL 获取图像 在文档中rte ckeditor image它说 最大尺寸与魔法图像的配置有关 必须在 Page TSCon
  • npm 错误“Keccak 绑定编译失败。”安装松露时

    我尝试安装 Truffle 但出现以下错误 npm install g truffle C Users dany vandermeij AppData Roaming npm truffle gt C Users dany vanderme
  • 以编程方式在其他视图的底部添加子视图

    我创建了一个 UIView 并通过界面生成器向其中添加了一些 UIlabel 我想以编程方式将 UIView 添加到此视图 self view addSubview newView 问题是 newView 隐藏了我使用界面生成器创建的部分标
  • 从 Google+ API json 结果中的对象 -> 内容末尾删除“\ufeff”

    Google API 的结果是 ufeff附加到每个 内容 结果的末尾 我真的不知道为什么 从 json 结果中删除此 unicode 字符的最佳方法是什么 它正在生产一个 在我显示的一些输出中 例子 https developers go
  • 在除以零的中断处理程序中该怎么做?

    操作系统中断处理程序应该如何处理与编码错误相关的中断 例如 我尝试除以 0 来测试我的中断 但我的中断处理程序被调用 然而 由于 div 指令没有成功执行 EIP 不会更新到它之后的下一条指令以及从中断处理程序返回后iret 它又回到了错误
  • 大表中的行数

    SELECT COUNT FROM BigTable 1 如果我的行数超过 10 亿 我应该使用哪种方式来获取表中的行数 更新 例如 如果上面的查询出现 超时问题 有什么方法可以优化它 怎样才能做得更快呢 如果您需要精确的计数 则必须使用C
  • 每次执行 make 先决条件

    我的生成文件 PHONY test unit test functional mocha test test unit test functional test unit SUITE unit test unit mocha echo un
  • 部署概念:打包 JAR 依赖项、何时以及为何

    因此 我对 Java EE 比较陌生 并且很难理解 Java 部署文件何时 何地以及为何与其依赖项一起打包 假设我将我的项目构建为myapp jar 并且依赖于 fizz jar buzz jar 和 JODA joda time 2 0
  • 清理 Python 模块并重新启动 Mac OS X

    我不是一个完全的新手 但我尝试安装模块很长一段时间 此时我想重新开始并安装 python 和我需要的所有模块 这样我才能真正理解它们 我的问题是 其中一些导入 但大多数安装到错误的站点包或不导入 可能是因为我弄乱了我的系统 python 我
  • 在Java或Android中将Mat(OpenCV)数据类型写入csv文件

    我喜欢将 Mat 类型数据从 OpenCV 提取到 csv 文件 我可以从 Mat 到字节数组 然后我写入文本文件 但我从未获得完整图像 始终获取图像的一部分 可能出什么问题了 printtoTextFile Mat d File file
  • R:在查询图形参数时防止 par() 打开新窗口

    这个问题说明了一切 有时您需要进行初步计算来格式化绘图 并且您不希望显示窗口 最重要的是抢走焦点 例如 假设您想知道用作边距的行的高度 您可能需要使用 par mai par mar 我经常查询图形参数来定义图形输出 但发现弹出的窗口分散注
  • 为什么我无法在 asp:CheckBox 上设置值?

    没有这个属性Value
  • Slickgrid 水平滚动条覆盖最后一行

    当 Slickgrid 包含在div具有固定宽度和水平滚动条变得必要 该滚动条覆盖最后一行数据 http jsfiddle net ericjohannsen LtsvJ http jsfiddle net ericjohannsen Lt
  • 如何使用 GDAL 从 tiff 和 4 个角纬度和经度创建 geotiff [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一张没有 TIFF 格式地理数据的图像 地图 我需要从我的图像中获取 GeoTIFF 文件 我的地
  • 为什么 tomcat 的数据库连接池有两个选项(tomcat-dbcp 和 tomcat-jdbc)?

    我想将数据库连接池添加到现有应用程序 我找到了两个基于tomcat的库tomcat dbcp and tomcat jdbc 我刚刚遇到麻烦了 我应该选择哪一个 总之 Tomcat 提交团队成员的注释 请参阅here https bz ap
  • 使用私有构造函数实例化内部类

    我正在尝试使用反射来创建类的实例 但它是内部密封的并且有私有构造函数 我想知道如何初始化它 并且作为框架的一部分 我只能使用反射将其取出 internal sealed class ABC private ABC string passwo