2

Here is my code

public class MyClass
{
    int LeftPoints;
    int RightPoints;

    public MyClass(int points)
        : this (points, points)
    {
        if (points < 0)
            throw new ArgumentOutOfRangeException("points must be positive");
    }

    public MyClass(int leftPoints, int rightPoints)
    {
        if (leftPoints < 0)
            throw new ArgumentOutOfRangeException("leftPoints must be positive");
        if (rightPoints < 0)
            throw new ArgumentOutOfRangeException("rightPoints must be positive");
    }
}

It is obvious that if I call new MyClass(-1) it throws the message "leftPoints must be positive".

It is possible to overload the first constructor using : this (points, points) and still get "the right" validation?

4

2 に答える 2

2

最初のコンストラクターから 2 番目のコンストラクターを呼び出すことによって、それを達成することはできません。

それがコードの再利用である場合は、別のアプローチを取ることができます。

public MyClass(int points)
{
    if (points < 0)
        throw new ArgumentOutOfRangeException("points must be positive");
    Init(points, points);
}

public MyClass(int leftPoints, int rightPoints)
{
    if (leftPoints < 0)
        throw new ArgumentOutOfRangeException("leftPoints must be positive");
    if (rightPoints < 0)
        throw new ArgumentOutOfRangeException("rightPoints must be positive");
    Init(leftPoints, rightPoints);
}

private void Init(int leftPoints, int rightPoints)
{
    LeftPoints = leftPoints;
    RightPoints = rightPoints;
}
于 2014-11-06T00:27:41.363 に答える
0

いいえ、ありません。

これは、コンストラクターのコードが続くnew MyClass(-1)のと同じことを宣言しました。それはまさにあなたが得たものです。new MyClass(-1,-1)MyClass(int)

于 2014-11-06T00:23:06.580 に答える