3

有没有更好的方法来做我正在做的事情:

class Sample {

int SampleValueX, SampleValueY;
string SampleFacing;    

public Sample(int samplevaluex, string samplefacing)
{
    SampleValueX = startpositionx;
    SampleValueY = 0;
    SampleFacing = samplefacing;
}

public Sample(int samplevaluey, string samplefacing)
{
    SampleValueX = 0;
    SampleValueY = startpositionx;
    SampleFacing = samplefacing;
}
}

这甚至被称为构造函数重载吗?如果我错了,请纠正我。

4

4 回答 4

10

您可以使用可选参数

class Sample {

  int SampleValueX, SampleValueY;
  string SampleFacing;    

  public Sample(string samplefacing, int samplevaluex = 0, int samplevaluey = 0)
  {
    SampleValueX = samplevaluex;
    SampleValueY = samplevaluey;
    SampleFacing = samplefacing;
  }

}

注意可选参数必须出现在强制参数之后

于 2012-12-12T12:04:53.713 回答
4

这是行不通的,因为您有两个具有相同参数的构造函数,并且在构造函数内部您无法区分一种形式和另一种形式。

使用 Visual Studio 2008 和后续版本,您可以使用对象初始化器语法初始化对象

    Sample sampleInstance = new Sample
    {
        SampleValueX = 0,
        SampleValueY = 10,
        SampleFacing = "MySample"
    };

这将消除初始化内部成员的需要。
当然,这要求您的内部属性公开,但情况并非总是如此。

class Sample
{
    public int SampleValueX {get;set;};
    public int SampleValueY {get;set;};
    public string SampleFacing {get; set;};

    ......
于 2012-12-12T12:03:46.723 回答
2

在我看来,这种逻辑不会为班级增加价值。如果该类有 3 个参数并且您想从构造函数中设置它们,我将添加一个带有 3 个参数的构造函数,并将构造函数调用所需的参数设置为 0。

对于类用户来说,这种方式会更清楚类参数值是什么。

于 2012-12-12T12:06:43.263 回答
2

我同意可选参数可能是您想要的。一种替代方法可能是:

class Sample
{
    int SampleValueX,  SampleValueY;
    string SampleFacing;

    public Sample(XSetting xSetting)
    {
        SampleValueX = xSetting.X;
        SampleValueY = 0;
        SampleFacing = xSetting.SampleFacing;
    }

    public Sample(YSetting ySetting)
    {
        SampleValueX = 0;
        SampleValueY = ySetting.Y;
        SampleFacing = ySetting.SampleFacing;
    }
}

public class XSetting
{
    public int X { get; set; }
    public string SampleFacing { get; set; }
}

public class YSetting
{
    public int Y { get; set; }
    public string SampleFacing { get; set; }
}

正如您的代码示例看起来这可能是矫枉过正。

顺便说一句,您的代码示例不会编译。

于 2012-12-12T12:07:37.863 回答