c# - 使用内部构造函数实例化类
问题描述
我正在尝试创建一个看起来只有两个构造函数的类的新实例,它们都是内部的。
这个类的代码可以在这个链接中找到:link
本质上,构造函数的代码如下所示:
//Automatic
internal CommandBuilder(ModuleBuilder module)
{
Module = module;
_preconditions = new List<PreconditionAttribute>();
_parameters = new List<ParameterBuilder>();
_attributes = new List<Attribute>();
_aliases = new List<string>();
}
//User-defined
internal CommandBuilder(ModuleBuilder module, string primaryAlias, Func<ICommandContext, object[], IServiceProvider, CommandInfo, Task> callback)
: this(module)
{
Discord.Preconditions.NotNull(primaryAlias, nameof(primaryAlias));
Discord.Preconditions.NotNull(callback, nameof(callback));
Callback = callback;
PrimaryAlias = primaryAlias;
_aliases.Add(primaryAlias);
}
我迷失了试图创建一个新的 CommandBuilder 对象。
解决方案
实际上你可以通过使用反射来做到这一点:
找到第一个(或其他)定义的构造函数
var constructor = typeof (InternalConstructorClass)
.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).First();
如果它是无参数的,则通过传递 null 来调用构造函数,如下所示:
var instance = constructor.Invoke(null);
否则,像这样传递参数:
var instance = constructor.Invoke(new object[]{param1,param2});
推荐阅读
- java - 为什么我的浮动操作按钮在屏幕上看起来像一个小点
- flutter - 无法在初始化程序中访问实例成员“上下文”。扑
- javascript - 无法使用 jQuery 在单击事件上获取 div 的高度
- javascript - TypeScript - 遍历字典类型中的类型并创建具有转换值的类型
- javascript - 如何使用条件“if”(JavaScript)在一定距离后使 div 消失
- c# - 将变量设置为函数的返回值,在该变量上运行。C#
- python - Chrome Saml 面板和 Python Flask Web 应用程序未显示 Saml 请求/响应
- amazon-web-services - CloudFront 的缓存重定向,但传递唯一的查询字符串参数
- apache-spark - Spark比较具有不同数据类型的数据帧之间的列值
- node.js - EACCES:在 Dockerfile 中添加用户时权限被拒绝