【发布时间】:2010-12-07 16:11:06
【问题描述】:
我正在尝试创建一个通用包装器来包装所有类型的值并提供一些额外的功能。
包装器看起来像:
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 工作正常,因为它只告诉您是否可以直接分配给变量而无需任何类型转换。无论如何修改包装类来解决这个问题?由于 CLR(又名结构)上的原始类型不允许继承,我不知道如何管理它。有什么想法吗?
提前致谢。
【问题讨论】:
标签: c# generics inheritance struct wrapper