Можем ли мы прервать создание объекта в конструкторе
Не могли бы вы мне помочь.
У меня есть одна идея, но я не знаю, как ее реализовать.
Итак, вопрос:
Можем ли мы прервать создание объекта в конструкторе
то есть.
//Code
SomeClass someClass = new SomeClass(someCriteria);
Итак, если someCriteria не отвечает по нашим требованиям, мы не должны создавать объект и должны возвращать null вместо нового объекта.
Можно ли реализовать его на С#?
Ответы
Ответ 1
Лучший способ - это класс factory, но если ваш класс настолько мал, вы можете использовать это:
class SomeClass
{
private string _someCriteria;
private SomeClass(string someCriteria)
{
_someCriteria = someCriteria;
}
public static SomeClass CreateInstance(string someCriteria)
{
if (someCriteria.Length > 2)
{
return new SomeClass(someCriteria);
}
return null;
}
}
class Program
{
static void Main(string[] args)
{
// returns null
SomeClass someClass = SomeClass.CreateInstance("t");
// returns object
SomeClass someClass2 = SomeClass.CreateInstance("test");
}
}
Ответ 2
Вы можете использовать класс factory, который создает экземпляры SomeClass, возвращающие null, если someCriteria недействителен.
Ответ 3
Обычно вы проверяете параметры конструктора, если они действительны. Если нет, вы обычно делаете исключение.
Я также прочитал хороший совет по предоставлению статических методов для проверки параметров конструктора. Это позволяет пользователю вашего класса проверять, будет ли то, что он собирается передать в конструкторе, будет успешным или нет. Те, кто уверен, что параметры в порядке (они сделали какую-то их проверку), будут напрямую работать с конструктором.
Также рассмотрите, что пользователь вашего класса, возможно, сделает с нулевым, а не с объектом (если использовался какой-то класс factory). Это обычно приводит к исключению NullPointerException на следующей строке? Как правило, хорошая идея - как можно скорее остановить неправильные вещи, в этом случае выбросить исключение и закончить. Это более чистое решение, чем возвращение null, и если кто-то действительно хочет (это определенно не будет лучшей практикой), он все равно сможет поймать это исключение...
Ответ 4
Если параметры вашего конструктора недействительны, подумайте о том, чтобы бросить ArgumentException или один из его классов-потомков (например, ArgumentOutOfRangeException
).
Ответ 5
Это было бы возможно. Другой способ заключается в том, чтобы поместить вашу проверку перед созданием объекта. Таким образом
SomeClass someClass = null;
if (someCriteria == VALID)
{
someClass = new SomeClass(someCriteria);
}
Надеюсь, что это поможет.
Ответ 6
Нет, это невозможно напрямую.
Вы можете создать исключение и добавить требуемый код для проверки исключения и присвоения нулевой переменной.
Лучшим решением было бы использовать Factory, который возвращал бы null, если какое-то условие не работает.
var someClass = SomeClassFactory.Create(someCriteria);
if(someClass != null)
{
}
Ответ 7
Конструкция new
гарантирует, что объект будет возвращен (или выбрано исключение). Так, как рекомендовалось, factory или аналогичная концепция позволит вам применить свою логику.