Кроме того, вы не можете использовать типы значений для своих полей.Например, вы можете создать класс «FirstName» со следующей реализацией:
public class FirstName
{
private string _Value;
public string Value
{
get
{
return _Value;
}
set
{
if (string.IsNullOrEmpty(value))
throw new ArgumentNullException("Value cannot be null");
if (value.Length > 128)
throw new ArgumentOutOfRangeException("Value cannot be longer than 128 characters");
_Value = value;
}
}
public FirstName(string initialValue)
{
Value = initialValue; //does validation check even in constructor
}
}
Наконец, в приведенном выше примере кода вы просто получите:
public interface IPersonInfo
{
FirstName FirstName { get; set; }
String LastName { get; set; }
}
и так далее сваши другие свойства.Затем, чтобы использовать свойство в вашем коделе, вы должны иметь:
public FirstName MyFirstName;
var x = MyFirstName.Value;
Если у вас есть много полей, которые вы хотите проверить, это может оказаться громоздким подходом.Однако вы можете обобщить его для обработки определенных типов чисел, таких как положительные числа (ints > 0
) или числа (int >= 0
), меры и т. Д.
Строки сложнее, поскольку они часто имеют ограничения по длине вдобавление к типам значений (например, без специальных символов, без цифр и т. д.) Это может быть возможно при наличии свойства длины только для чтения, которое устанавливается в конструкторе наследующего класса.