Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用2个构造函数?_C#_Class_Constructor - Fatal编程技术网

C# 如何使用2个构造函数?

C# 如何使用2个构造函数?,c#,class,constructor,C#,Class,Constructor,我有以下课程: public class STElement { public int _value; public STElement _next; public int _index; public STElement() { _value = 0; _next = null; _index = 0; } } 在程序运行时,我想创建一些如下对象: _rootStack1 = new STElement(); _rootStack2 = ne

我有以下课程:

public class STElement
{
  public int _value;
  public STElement _next;
  public int _index;

  public STElement()
  {
    _value = 0;
    _next = null;
    _index = 0;
  }
}
在程序运行时,我想创建一些如下对象:

_rootStack1 = new STElement();
_rootStack2 = new STElement();
_rootStack3 = new STElement();
但是我只希望\u rootStack1具有\u索引=0


那么我如何才能做到这一点,三个对象中只有一个获得_index?

STElement st1=新的STElement(1)

public class STElement
{
  public int _value;
  public STElement _next;
  public int _index;

  public STElement()
  {
    _value = 0;
    _next = null;
    _index = 0;
  }
  public STElement(int index)
      : this()
  {
     _index = index;
  }
}


_rootStack1 = new STElement(1);
_rootStack2 = new STElement(2);
_rootStack3 = new STElement();

您可以创建一个构造函数,该构造函数接受索引的值并将其分配给变量

public STElement(int index)
{
  _value = 0;
  _next = null;
  _index = index;
}
这不会强制要求对象是唯一具有此类
0
索引的对象-这不是对象可以直接执行的操作


关于样式的注意事项-使用
公共
字段不是一种好的做法。您应该使用属性来公开它们。

您可以像方法一样重载构造函数。 与此类似:

 public STElement()
  {
    _value = 0;
    _next = null;
    _index = 0;
  }

 public STElement(int param1)
  {
    _value = param1;
    _next = null;
    _index = 0;
  }

 public STElement(int param1, int param2):this()
  {
    _value = param1;
    _next = null;
    _index = param2;
  }

为什么不将所需的索引传递给构造函数呢

您可以使具有默认参数的构造函数不必像这样更改对其进行的其他调用:

public STElement(int index = 0)
{
  _value = 0;
  _next = null;
  _index = index;
}

这样,所有未传递索引的实例化都将获得默认值,对于其他实例化,您可以指定所需的特定索引。或者你也可以用另一种方法,将默认值设置为不同于0的值,并且只针对你想要的值,你可以调用index=0的构造函数。

不确定我是否遵循,你是说每个连续的
\u rootStack#
都会有一个递增的索引吗?所以
\u rootStack1.\u index==0
\u rootStack2.\u index==1
,和
\u rootStack3.\u index==2
那么我该怎么做呢,这三个对象中只有一个获得了_index?
是否希望其他对象没有_index?您无法确保只有一个对象的_index==0。或者您希望其他实例根本没有索引字段?然后创建一个没有该字段的基类,并在添加该字段的类中派生它。这样您将拥有_rootStack1=newstelementwithindex();其余的将是基类的实例。这就是你想要的吗?@TimKatheteStadler我想投反对票是因为你的问题太模糊了。我还是不知道你要什么。根据定义,您的类的所有实例都分配了一些
\u索引
值;您所说的是,其他两个实例“不应该得到它们”,这是没有意义的(特别是当它们默认都被赋值为
0
时)。我们试图澄清你的思维过程是什么,你真正想要什么。也许你应该描述一下你想要完成的最终任务是什么?
public STElement(int index = 0)
{
  _value = 0;
  _next = null;
  _index = index;
}