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

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(使用前将#替换为@)

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

  • 检查空参数的最佳方法(保护子句)

    例如 您通常不希望构造函数中的参数为空 因此看到类似的内容是很正常的 if someArg null throw new ArgumentNullException nameof someArg if otherArg null throw
  • 以相反的顺序迭代可变参数模板参数

    如果我手动反转传递给它的模板参数的顺序 以下代码将起作用 template
  • 为什么opencv videowriter这么慢?

    你好 stackoverflow 社区 我有一个棘手的问题 我需要你的帮助来了解这里发生了什么 我的程序从视频采集卡 Blackmagic 捕获帧 到目前为止 它工作得很好 同时我用 opencv cv imshow 显示捕获的图像 它也工
  • 没有 Unicode 字节顺序标记。无法切换到 Unicode

    我正在使用 XSD 编写 XML 验证器 下面是我所做的 但是当验证器到达该线时while list Read 它给了我错误 没有 Unicode 字节顺序标记 无法切换到 Unicode 有人可以帮我解决吗 public class Va
  • 切换图片框可见性 C#

    为什么图片框控件的可见性属性在这里不起作用 我最初将它们设置为 false 以便在屏幕加载时它们不可见 但后来我想切换这个 我已完成以下操作 但似乎不起作用 这是一个 Windows 窗体应用程序 private void Action w
  • rand() 播种与 time() 问题

    我很难弄清楚如何使用 rand 并使用 Xcode 用 time 为其播种 我想生成 0 到 1 之间的随机十进制数 该代码为我提供了元素 1 和 2 看似随机的数字 但元素 0 始终在 0 077 左右 有什么想法吗 我的代码是 incl
  • 在通过网络发送之前压缩位图

    我正在尝试通过网络发送位图屏幕截图 因此我需要在发送之前对其进行压缩 有一个库或方法可以做到这一点吗 当您将图像保存到流时 您have选择一种格式 几乎所有位图格式 bmp gif jpg png 都使用一种或多种压缩形式 因此 只需选择适
  • C 中的模仿函数重写

    具体来说 函数重写能够调用基本重写方法 这有两部分 一个是预编译的库代码 1 另一个是库的用户代码 2 我在这里实现了一个尽可能最小的经典 Person 和 Employee 示例 非常感谢了解 OOP 概念的铁杆 C 开发人员的回应 我正
  • 使用scanf()时如何区分整数和字符

    我只是使用该功能scanf 代码如下 scanf d a printf d a 当我输入1时 它会像我想要的那样打印1 但即使我输入 1a 它也会像以前一样打印 1 当用户输入非整数时 例如 2 3 12ab 1 a 我想向用户显示 输入整
  • 为什么重载方法在 ref 仅符合 CLS 方面有所不同

    公共语言规范对方法重载非常严格 仅允许根据其参数的数量和类型来重载方法 如果是泛型方法 则根据其泛型参数的数量进行重载 根据 csc 为什么此代码符合 CLS 无 CS3006 警告 using System assembly CLSCom
  • c# 如何生成锦标赛括号 HTML 表

    所以我已经被这个问题困扰了三个星期 但我一生都无法弄清楚 我想做的是使用表格获得这种输出 演示 http www esl world net masters season6 hanover sc2 playoffs rankings htt
  • 为什么WCF中不允许方法重载?

    假设这是一个ServiceContract ServiceContract public interface MyService OperationContract int Sum int x int y OperationContract
  • 如何不在类中实现接口的功能?

    面试时面试官问了我以下问题 但我不知道这个问题的答案是什么 请帮忙 如果我不想 我必须做什么 在我的类中实现一个函数 在接口中声明为 由我班实施 Edited 我正在使用 NET 和 C 如果有人可以提供 C 示例代码示例 那就太好了 Th
  • `cosf`、`sinf` 等不在 `std` 中 [重复]

    这个问题在这里已经有答案了 根据这里的讨论 我有报告了一个错误 https bugs launchpad net ubuntu source gcc 8 bug 1831385给 Ubuntu 开发者 编译以下示例 C 程序时 includ
  • Dynamics Crm:获取状态代码/状态代码映射的元数据

    在 Dynamics CRM 2011 中 在事件实体上 状态原因 选项集 也称为状态代码 与 状态 选项集 也称为状态代码 相关 例如看这个截图 当我使用 API 检索状态原因选项集时 如下所示 RetrieveAttributeRequ
  • 为什么C语言中可以使用多个分号?

    在 C 中我可以执行以下操作 int main printf HELLO WORLD 它有效 这是为什么 我个人的想法 分号是一个 NO OPERATION 来自维基百科 指示符 拥有一大串分号与拥有一个分号并告诉 C 语句已结束具有相同的
  • 是否有任何不使用公共虚拟方法的正当理由? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 是否有任何不使用公共虚拟方法的正当理由 我在某处读到我们应该避免使用公共虚拟方法 但我想向专家确认这是否是有效的声明 对于良好且稳定的 API
  • 正在获取“未终止 [] 设置”。 C# 中的错误

    我正在 C 中使用以下正则表达式 Regex find new Regex url
  • 如何使用 ASP.NET Web 表单从代码隐藏中访问更新面板内的文本框、标签

    我在更新面板中定义了一些控件 它们绑定到中继器控件 我需要根据匿名字段隐藏和显示用户名和国家 地区 但问题是我无法以编程方式访问更新面板中定义的控件 我如何访问这些控件 我也在网上查找但找不到很多参考资料 下面是来自aspx页面和 cs页面
  • 如何从函数返回矩阵(二维数组)? (C)

    我创建了一个生成宾果板的函数 我想返回宾果板 正如我没想到的那样 它不起作用 这是函数 int generateBoard int board N M i j fillNum Boolean exists True initilize se

随机推荐

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

    我正在开发一个 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