Я пытаюсь создать универсальную оболочку, которая охватывает все виды значений и предоставляет некоторые дополнительные функции.
Обёртка выглядит так:
class PropertyWrapper<T>
{
private T _value;
public PropertyWrapper(T value)
{
_value = value;
}
public PropertyWrapper()
{
}
public static implicit operator T(PropertyWrapper<T> value)
{
return value._value;
}
public static implicit operator PropertyWrapper<T>(T value)
{
return new PropertyWrapper<T>(value);
}
}
У него есть неявный оператор преобразователя, так что программист может работать с ним так же, как он работает с упакованным типом.
Теперь у меня есть следующий код:
PropertyWrapper<Int32> wrapped = new PropertyWrapper<Int32>();
Int32 unwrapped;
unwrapped = 42;
wrapped = unwrapped; //working
wrapped = 21; //working
unwrapped = wrapped; //working
if (wrapped.GetType().IsAssignableFrom(unwrapped.GetType())) //will return false.
{
foo();
}
Теперь я вижу, что функция IsAssignableFrom работает правильно, потому что она говорит только о том, можно ли назначить переменную напрямую без какого-либо преобразования типа. Есть ли способ изменить класс Wrapper, чтобы обойти это? Поскольку примитивные типы в CLR (или структура) не позволяют наследовать от них, я понятия не имею, как с этим справиться. Есть идеи на этот счет?
Заранее спасибо.