16

クラスではprintステートメントを使用しないという規則に従いますが、コンストラクターでパラメーターの検証を行いました。コンストラクターで行った検証をMain関数に戻す方法を教えてください。

4

6 に答える 6

34

コンストラクターは値を返します-構築中の型...

コンストラクターは、他のタイプの値を返すことは想定されていません。

コンストラクターで検証するときに、渡された値が無効な場合は例外をスローする必要があります。

public class MyType
{
    public MyType(int toValidate)
    {
      if (toValidate < 0)
      {
        throw new ArgumentException("toValidate should be positive!");
      }
    }
}
于 2012-11-21T16:27:22.697 に答える
5

コンストラクターには戻り型はありませんが、refキーワードを使用して参照により値を渡すことができます。検証の失敗を示すために、コンストラクターから例外をスローすることをお勧めします。

public class YourClass
{
    public YourClass(ref string msg)
    {
         msg = "your message";
    }

}    

public void CallingMethod()
{
    string msg = string.Empty;
    YourClass c = new YourClass(ref msg);       
}
于 2012-11-21T16:26:38.200 に答える
2

Outパラメーターを使用してコンストラクターを作成し、同じパラメーターを介して戻り値を送信します。

public class ClassA
{
    public ClassA(out bool success)
    {
        success = true;
    }
}
于 2015-07-03T08:40:17.373 に答える
0

コンストラクターが無効な引数を受け取った場合、例外をスローするのが一般的です。次に、この例外をキャッチして、それに含まれるデータを解析できます。

try
{
    int input = -1;
    var myClass = new MyClass(input);
}
catch (ArgumentException ex)
{
    // Validation failed.
}
于 2012-11-21T16:28:24.913 に答える
0

コンストラクターは、インスタンス化されている型を返し、必要に応じて例外をスローできます。おそらく、より良い解決策は、静的メソッドを追加して、クラスのインスタンスを作成することです

public static bool TryCreatingMyClass(out MyClass result, out string message)
{
    // Set the value of result and message, return true if success, false if failure
}
于 2012-11-21T16:28:54.633 に答える
0

私のアプローチも役立つかもしれないと思います。コンストラクターにパブリックプロパティを追加する必要があります。そうすれば、以下の例のように、他のクラスからこのプロパティにアクセスできます。

// constructor
public class DoSomeStuffForm : Form
{
    private int _value;

    public DoSomeStuffForm
    {
        InitializeComponent();

        // do some calculations
        int calcResult = 60;
        _value = calcResult;
    }

    // add public property
    public int ValueToReturn
    {
        get 
        {
            return _value;
        }
    }
}

// call constructor from other class
public statc void ShowDoSomeStuffForm()
{
    int resultFromConstructor;

    DoSomeStuffForm newForm = new DoSomeStuffForm()
    newForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
    newForm.ShowDialog();

    // now you can access value from constructor
    resultFromConstructor = newForm.ValueToReturn;

    newForm.Dispose();
}
于 2019-01-10T16:46:18.923 に答える