Class C类实例化问题
我正在VS2019上运行一个C项目,代码结构如下: 在Class1.cs文件中: 对于line Run算法,我得到以下错误: “Class1.MyClass2”必须是具有公共 无参数构造函数,以便将其用作 泛型类型或方法“Class1.RunAlgorithm” 即使我将其更改为Public,错误仍然存在 至少,它必须受到保护,以便MyClass可以访问它 所以你的班级是1.MyClass2 必须具有公共无参数构造函数消息表示MyClass需要构造函数。上面的我有这样一个构造函数,即使它不在代码中;在没有开发人员提供构造函数的情况下,编译器只提供一个调用基本无参数构造函数的构造函数 …这就引出了下一点;MyClass2扩展了Class2,因此Class2的构造函数需要可以访问。虽然Class2的构造函数是私有的,但MyClass2的构造函数不能调用它。c上的每个构造函数都必须调用另一个构造函数或基构造函数。如果不指定,编译器将为您插入对base的调用,如果无法访问base构造函数,则调用将失败 为了解决这些问题,您需要在MyClass2中使用公共无参数构造函数: 公共MyClass2:基{} 或者不使用basecompiler将添加基本调用 或者空白编译器将添加所有内容Class C类实例化问题,class,visual-studio-2019,abstract,Class,Visual Studio 2019,Abstract,我正在VS2019上运行一个C项目,代码结构如下: 在Class1.cs文件中: 对于line Run算法,我得到以下错误: “Class1.MyClass2”必须是具有公共 无参数构造函数,以便将其用作 泛型类型或方法“Class1.RunAlgorithm” 即使我将其更改为Public,错误仍然存在 至少,它必须受到保护,以便MyClass可以访问它 所以你的班级是1.MyClass2 必须具有公共无参数构造函数消息表示MyClass需要构造函数。上面的我有这样一个构造函数,即使它不在代码
您需要一些东西使MyClass2可以访问Class2的构造函数,即将Class2的构造函数声明为public或protected,您正在努力理解错误消息的哪一部分?很清楚…private Class2{}-您希望如何创建MyClass2的实例?@David即使我将其更改为Public,错误仍然存在。@CaiusJard类型不是抽象的,并且我有一个无参数构造函数,因此我已经满足了错误提到的条件。。所以我不明白它为什么会持续存在。发布的代码没有显示Class1.MyClass2有一个公共的无参数构造函数?但是在链接的.NET fiddle中,它编译并运行,没有打印任何内容。如果将构造函数从protected更改为private并再次运行,它将给出一个关于可访问性的错误。如果您在MyClass2中提供了一个非公共构造函数,那么您将得到关于Hanks的错误,在为MyClass2(不仅仅是Class2)添加了一个单独的基构造函数之后,错误得到了解决!:是的,重要的是要记住,如果您提供任何类型的构造函数,那么编译器将不会提供默认的空构造函数
public class Class1
{
public class MyClass2 : Class2
{
...
}
private void RunAlgorithm<T>() where T : Class2, new()
{
T argInstance = new T();
...
}
static void Main(string[] args)
{
RunAlgorithm<MyClass2>();
}
}
public class Class2
{
public Class2() { }
public string setParameters { get; set; }
}
public class Class1
{
class MyClass2 : Class2
{
}
private void RunAlgorithm<T>() where T : Class2, new()
{
T argInstance = new T();
}
public static void Main(string[] args)
{
new Class1().RunAlgorithm<MyClass2>();
}
}
public class Class2
{
protected Class2() { }
public string setParameters { get; set; }
}