C# 在不传递参数的情况下创建新对象
我正在阅读使用C#的数据结构和算法(Michael McMillan) 在第3章第43页中,我发现了一个代码段,它在构造函数中接受参数,但创建对象时没有传递任何内容C# 在不传递参数的情况下创建新对象,c#,arrays,class,object,constructor,C#,Arrays,Class,Object,Constructor,我正在阅读使用C#的数据结构和算法(Michael McMillan) 在第3章第43页中,我发现了一个代码段,它在构造函数中接受参数,但创建对象时没有传递任何内容 这可能吗?首先,是的,这是可能的,但在这种情况下,我不这么认为。 您可以创建多个构造函数,以允许这种情况,如: public CArray() { this(5); } public CArray(int size){ arr = new int[size]; //other logic's must be
这可能吗?首先,是的,这是可能的,但在这种情况下,我不这么认为。 您可以创建多个构造函数,以允许这种情况,如:
public CArray() {
this(5);
}
public CArray(int size){
arr = new int[size];
//other logic's must be here
}
描述:第一个构造函数或多或少是“默认构造函数”,它将以参数大小输入另一个构造函数。您还可以添加更多构造函数。如果在类中定义带有参数的自定义构造函数,则默认的无参数构造函数不可用 在这种情况下,如果要保留无参数构造函数,必须在类中显式定义它
因此,在您的示例中,根据您提供的类定义,不可能创建这样的新实例:
new CArray()
对于要编译的代码CArray
必须具有无参数构造函数;
最可能的语法是
public CArray()
: this(0) {
}
i、 e.如果未指定
size
,则将其设为0
,您必须有一个无参数的构造函数,并且有一些方法:
- 1:可选参数
- 2:多重覆盖
1:可选参数:
public class CArray {
private int[] arr;
private int upper;
private int numElements;
//Constructor with default value parameter
public CArray(int size = 0)
{
//Your logic must be here
}
}
2:多重覆盖
public class CArray {
private int[] arr;
private int upper;
private int numElements;
//Constructor with zero parameter
public CArray()
{
this = new CArray(0);
}
public CArray(int size)
{
//Your logic must be here
}
}
因此,在定义类的末尾和之后,您可以使用两种类型:
var MyArray1 = new CArray();
var MyArray2 = new CArray(10);
可能有以下几种可能性:
- 打字错误
- 还有另一个过载
- 可能存在默认值
public class CArray { private int[] arr; private int upper; private int numElements; //Constructor with zero parameter public CArray() { this = new CArray(0); } public CArray(int size) { //Your logic must be here } }
即使问题中提供的代码不会按“原样”编译(如果没有三种解释中的一种,也可以使用
System.Runtime.Serialization.FormatterServices
,创建一个未初始化的实例,而无需任何构造函数调用:
class SomeType
{
int mVariable;
public SomeType(int size)
{
mVariable = size;
}
}
static void Main(string[] args)
{
Type someType = typeof(SomeType);
SomeType instance = (SomeType)FormatterServices.GetUninitializedObject(someType);
// instance.mVariable = 0;
}
请记住,此方法速度慢且不安全,因为您可能会以其开发人员不希望您手动重写构造函数的方式使用
类
,因此它应仅用于序列化目的,而不用于一般初始化。通常,最好将源代码作为文本发布,而不是作为文本发布图。回答您的问题:可能有几个构造函数重载。例如,一个没有参数,如public CArray()
,另一个带有public CArray(int size)
也可能是其他的。你是否尝试使用默认值的可选参数?@UweKeim知道了,我是第一次发布的。这可能是一个输入错误。我知道有很多构造函数的可能性,作者也应该提到其他构造函数。我希望你现在知道。请标出最佳答案(在你看来)这不是的语法。
class SomeType
{
int mVariable;
public SomeType(int size)
{
mVariable = size;
}
}
static void Main(string[] args)
{
Type someType = typeof(SomeType);
SomeType instance = (SomeType)FormatterServices.GetUninitializedObject(someType);
// instance.mVariable = 0;
}