Ваш вопрос здесь, похоже, об авто-свойствах, а не об универсальных.
У авто-свойств должен быть установлен аксессор, хотя он не должен иметь ту же видимость, что и get:
public T Value { get; private set; }
Вы можете вызвать набор в конструкторе:
public Nullable ( T value ) {
Value = value;
}
Хотя в этом случае вы имеете дело со структурой, и у них всегда есть конструктор по умолчанию (без параметров) - вы должны быть немного осторожнее со структурами и автоматическими свойствами.
В .net уже есть обнуляемый универсальный:
Nullable<int> i = GetCounterThatMightBeNull();
int j = 0;
if( i.HasValue )
j = i.Value;
...
Это было добавлено в .Net 2 (одновременно с дженериками), и хотя ранние бета-версии выглядели как код выше, они упростили его до окончательной версии:
//int? is shorthand for Nullable<int>
int? i = GetCounterThatMightBeNull();
// ?? is shorthand for the null check
int j = i ?? 0;
//or
if( i == null ) {
//this works even though Nullable<int> is a struct
}