Подтвердить что ты не робот

Как вернуть значение с помощью конструктора в С#?

Я следую соглашению, что я не буду использовать никаких операторов печати в классах, но я проверил валидацию параметра в конструкторе. Скажите, пожалуйста, как вернуть эту проверку, которую я сделал в конструкторе, к главной функции.

4b9b3361

Ответ 1

Конструктор возвращает значение - строящийся тип...

Конструктор не должен возвращать какой-либо другой тип значения.

Когда вы проверяете конструктор, вы должны бросать исключения, если недопустимые значения переданы.

public class MyType
{
    public MyType(int toValidate)
    {
      if (toValidate < 0)
      {
        throw new ArgumentException("toValidate should be positive!");
      }
    }
}

Ответ 2

Конструкторы не имеют типа возврата, но вы можете передавать значения по ссылке с помощью ключевого слова 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);       
}

Ответ 3

Сделайте конструктор с параметром Out и отправьте свое возвращаемое значение через него.

public class ClassA
{
    public ClassA(out bool success)
    {
        success = true;
    }
}

Ответ 4

Когда конструктор получает недопустимый аргумент, он обычно генерирует исключение. Затем вы можете поймать это исключение и проанализировать содержащиеся в нем данные.

try
{
    int input = -1;
    var myClass = new MyClass(input);
}
catch (ArgumentException ex)
{
    // Validation failed.
}

Ответ 5

Конструктор возвращает создаваемый тип и, при необходимости, может вызывать исключение. Возможно, лучшим решением было бы добавить статический метод, чтобы попытаться создать экземпляр вашего класса:

public static bool TryCreatingMyClass(out MyClass result, out string message)
{
    // Set the value of result and message, return true if success, false if failure
}

Ответ 6

Я думаю, что мой подход также может быть полезным. Необходимо добавить открытое свойство в конструктор, тогда вы можете получить доступ к этому свойству из другого класса, как показано в примере ниже.

// 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();
}