我想創建一個通用包裝,包裝所有類型的值提供一些額外的功能。通用包裝和isAssignableFrom不工作
的包裝看起來像:
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(aka結構體)上的原始類型不允許繼承,我不知道如何管理它。有關於此的任何想法?
在此先感謝。
OR映射程序正在使用IsAssignableFrom檢查它是否可以將數據庫中的類型資金分配給要填充的對象的每個屬性。因爲不想更改數據庫類型/ CLR中的OR映射器中的映射,我認爲我可以解決這個問題。 – Kolja 2010-12-07 16:29:52