首页 > 解决方案 > 使用内部构造函数实例化类

问题描述

我正在尝试创建一个看起来只有两个构造函数的类的新实例,它们都是内部的。

这个类的代码可以在这个链接中找到: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 对象。

标签: c#asp.netconstructor

解决方案


实际上你可以通过使用反射来做到这一点:

找到第一个(或其他)定义的构造函数

var constructor = typeof (InternalConstructorClass)
     .GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic).First();

如果它是无参数的,则通过传递 null 来调用构造函数,如下所示:

var instance = constructor.Invoke(null);

否则,像这样传递参数:

var instance = constructor.Invoke(new object[]{param1,param2});

推荐阅读