Я написал простой абстрактный общий класс в C# (.NET 2.0), и я предпочитаю ограничивать его только ссылочными типами, поэтому я могу указать значение null. Тем не менее, я также хочу использовать такие типы, как long и decimal, почему бы не разрешить null (будучи структурами в конце концов). Я рассмотрел вопрос о создании классаКакие типы использовать для бокса в генераторах
public abstract Field<Nullable<T>>
{
}
Но это не позволило бы мне использовать тип строки, являющийся классом Как я могу поместить мои десятичные знаки и длинные, чтобы я мог использовать их в этом роде.
abstract class Field<T>
{
private int _Length = 1;
private bool _Required = false;
protected T _Value; //= null;
public int Length
{
get { return _Length; }
private set
{
if (value < 1) throw new ArgumentException("Field length must be at least one.");
_Length = value;
}
}
public bool Required
{
get { return _Required; }
private set { _Required = value; }
}
public abstract string GetFieldValue();
public abstract void ParseFieldValue(string s);
public virtual T Value
{
get { return _Value; }
set
{
if (value == null && Required)
throw new ArgumentException("Required values cannot be null.");
_Value = value;
}
}
}
Обратите внимание, что мне нужно представлять числовые 0 и null по-разному. По этой причине значение по умолчанию (T) не будет работать.
Это может действительно работать, если оба они сходят с общего неродного предка (Поле) ... –
@ C. Росс - Да, это может сработать. Я использовал не общий базовый класс, чтобы включить ветвление наследования раньше. – stevehipwell