首页 > 解决方案 > C# Activator.CreateInstance 错误,MissingMethodException:System.MissingMethodException:没有为此对象定义无参数构造函数

问题描述

我正在用 C# 编程,现在我有一个简单的问题要问。

我有三个班级:

  1. 内部抽象类 Foo,它没有定义构造函数/实例。

  2. 内部抽象类 Bar : Foo,它定义了一个默认构造函数:

    /// <summary>
    /// Set up defaults.
    /// </summary>
    public Bar()
    {
    
    }
    
  3. 内部类 Baz:Bar。对于这个类,我没有输入任何默认构造函数。相反,我有一个构造函数,它接受一些参数,并将这些参数的值分配给此类下的字段。

    /// <summary>
    /// Set up defaults with parameters.
    /// </summary>
    /// <param name="parameters">GenericParams json string to use</param>
    /// <param name="startTime">Start time parameter. Must be a valid DateTime format.</param>
    /// <param name="endTime">End time parameter. Must be a valid DateTime format.</param>
    /// <param name="pageSize">Page size argument</param>
    public Baz(string parameters, string startTime, string endTime, int pageSize)
    {
        this.Parameters = parameters;
        this.StartTime = startTime;
        this.EndTime = endTime;
        this.PageSize = pageSize;
    }
    

但是,我现在遇到的单元测试脚本有问题:

    /// <summary>
    /// Unit Test 1.
    /// </summary>
    public void Test1()
    {
            ********Some Codes********
            Foo args = Activator.CreateInstance(typeof(Baz)) as Foo;
            Assert.IsNotNull(args);
            ********Some Codes********
        }
    }

    /// <summary>
    /// Unit Test.
    /// </summary>
    public void Test2()
    {
            ********Some Codes********
            Bar args = Activator.CreateInstance(typeof(Baz)) as Bar;
            Assert.IsNotNull(args);
            ********Some Codes********
        }
    }

在我的单元测试中,错误发生在 Activator.CreateInstance() 行。是不是因为我没有在 Baz() 下定义默认构造函数?我的猜测是,因为我定义了一个接受 Baz() 参数的构造函数,如果我想使用 Activator.CreateInstance(type) 来调用类的默认构造函数,我必须在 Baz() 下定义这个默认构造函数。

我想我的问题是,如果我只定义参数化构造函数而不定义默认构造函数,那么默认构造函数是否可能不存在?

请让我知道我的猜测是否正确。我无法提供单元测试的更多细节,因为这是来自我公司的代码库。如果上面有什么我没有解释清楚的地方,也请发表评论。我会很快跟进。

提前感谢您的宝贵时间。

标签: c#

解决方案


推荐阅读