Для зная , если поле было инициализировано, вы вынуждены использовать флаг.
Сделайте его явным bool _xIsSet;
или, если _x
- int
, тогда введите тип int?
и проверьте, чтобы значение было нулевым.
Первое не выдает никаких исключений, но если вы не будете осторожны, вы будете работать с неинициализированными значениями.
Последний способ выдает ошибки;возможно лучше, но все еще во время выполнения.
Вместо этого вы можете выбрать свойства и обернуть поля проверками на нулевое значение, но результат будет таким же;любая ошибка могла бы появиться во время выполнения.(или не совсем)
Метод I предпочитаете с 20?годы должен иметь конструктор, который принимает все параметры и даже убедиться, что конструктор по умолчанию отсутствует.
var myPoint = new Point(
valueX,
valueY,
valueK
);
В более поздних версиях C # можно назвать аргументы, чтобы код стал довольно легко читаться.
var myPoint = new Point(
X = valueX,
Y = valueY,
L = valueK // <-- see here! it is quite easy to spot a possible error
);
Мое объяснение использования этого метода, за исключением того, который вы заявляете, заключается в том, что «очень редко вы хотите, чтобы Customer
не был установлен полностью».Затем ... если есть несколько способов установить Customer
полностью, я создаю больше конструкторов.
Я пошел дальше и избегаю нуля столько, сколько могу, поэтому в моем коде есть никогда a Customer
, который только наполовину установлен, и очень редко Customer
, который равен нулю.
В последнее время я начал экспериментировать с использованием статических конструкторов;тогда вызов var customer = Customer.Create(...)
.Это имеет вкус DDD , поскольку Create
может выражать намерение , может выражать , почему создан класс.var customer = Customer.CreateFromEntranceScan(...)
или var customer = Customer.CreateFromTaxDeduction(...)
.