Свойства не могут иметь параметры в C #, поэтому, если вы хотите использовать синтаксис свойств, вам понадобятся два свойства с разными именами.
Если вы не хотите, чтобы пользователи вашего класса знали о том, что внутренне ваше поле может быть пустым, это довольно просто, если вы контролируете реализацию своего свойства. Определите вспомогательное поле вашей собственности типа int?
, но оставьте тип вашей собственности как int
.
Например:
private int? _someNumber = null;
public int SomeNumber {
get { return _someNumber.HasValue ? _someNumber.Value : 0; }
set { _someNumber = value; }
}
Теперь внутри вы всегда можете получить доступ к _someNumber.HasValue
, чтобы проверить, установлено или нет значение.
Однако, когда вы говорите: «Я хотел бы добавить опцию, чтобы иметь версию, допускающую обнуление.», Если вы делаете хотите, чтобы ваш клиент мог узнать, есть ли у SomeNumber
Значение тогда у вас есть несколько вариантов:
- Выставить собственность как
bool SomeNumberHasValue
- Измените тип
SomeNumber
на int?
- Добавить второе свойство
SomeNumberNullable
с типом возврата int?
Однако одно свойство не может иногда возвращать int
и возвращать int?
в другое время.
Другой вариант - использовать метод для доступа к значению, например так:
public int? GetSomeNumber(bool canReturnNull)
{
if (canReturnNull)
return _someNumber;
return _someNumber.HasValue ? _someNumber.Value : 0;
}
По сути, вы проделываете большую работу, чтобы ваши клиенты могли легко обрабатывать нулевую проверку, не скрывая тот факт, что значение может быть нулевым. В чем выгода?