Я написал простой абстрактный обобщенный класс на C # (.NET 2.0), и я предпочтительно хочу ограничить его только ссылочными типами, чтобы я мог указать нулевое значение. Тем не менее, я также хочу использовать такие типы, как 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 и ноль по-разному. По этой причине default (T) не будет работать.