У меня есть этот базовый класс ниже:
abstract class RequiredString {
protected readonly string _text;
public RequiredString(string name, string text)
{
if (string.IsNullOrWhiteSpace(text))
throw new TextEmptyException($"The '{name}' field is required");
_text = text;
}
public RequiredString(string name, string text, int maxLength): this(name, text)
{
if (_text.Length > maxLength)
throw new TextLengthTooLongException($"The '{name}' field length is too long ({text.Length}/{maxLength})");
}
public static implicit operator string(RequiredString field)
{
return field._text;
}
}
У меня есть дюжина классов, которые наследуются от базового класса.Все имеют максимальную длину: например:
public sealed class Email : RequiredString
{
private const int Length = 255;
private const string Name = "Email";
public Email(string text) : base(Name, text, Length)
{
try
{
new MailAddress(_text);
}
catch (FormatException ex)
{
throw new EmailFormatException($"'{_text}' field is not a valid email string", ex);
}
}
public static implicit operator Email(string text)
{
return new Email(text);
}
}
Допустим, читатель проверяет класс Email и не видит базовый класс.
Понятно ли ему / ей, что проверка длины происходит в базовом классе?Имеет ли это смысл или я должен поставить проверку длины в каждом унаследованном классе?Как бы вы изменили этот код, чтобы сделать его чище?
Спасибо!