如何使用2个构造函数?

时间:2012-12-13 14:41:58

标签: 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 = new STElement();
_rootStack3 = new STElement();

但我只希望 _rootStack1 拥有 _index = 0;

那我该怎么做呢,三个对象中只有一个得到_index?

5 个答案:

答案 0 :(得分:2)

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

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

这不会强制该对象是唯一具有此类0索引的对象 - 这不是对象可以直接执行的操作。

关于风格的注意事项 - 拥有public字段不是一个好习惯。您应该使用属性来公开它们。

答案 1 :(得分: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();

答案 2 :(得分:1)

STElement st1 = new 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)
  {
    _value = 0;
    _next = null;
    _index = index;
  }
}

答案 3 :(得分:1)

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

您可以使用默认参数创建一个构造函数,而不必像以下那样更改对其进行的其他调用:

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

这样,所有未通过索引的实例都将获得默认值,而对于其他实例,您可以指定所需的特定索引。或者你可以反过来做,将默认值设置为不同于0的值,只有你想要的那个,你可以用index = 0来调用构造函数。

答案 4 :(得分: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;
  }

...