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

同じパラメーターを持つ 2 つのコンストラクターがあり、コンストラクター内で一方のフォームを他方のフォームと区別できないため、これは機能しませんでした。

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 に答える