为不可变类型实现ICompositeUserType
本文关键字:ICompositeUserType 实现 类型 不可变 | 更新日期: 2023-09-27 18:16:29
我有一个不可变的Money类型(金额和货币),我复制了我在这里看到的一个例子。
它们是这样实现深度复制的:
public object DeepCopy(object value)
{
return new Money(((Money) value).Amount, ((Money) value).Currency);
}
对于不可变变量来说是毫无意义和低效的。但由于我不了解NHibernate库的内部,我想知道是否有必要,如果它是安全的这样做:
public object DeepCopy(object value)
{
return value;
}
我能预见的唯一区别是,如果在NHibernate的某个地方,他们依赖于object
的!=
操作符返回true
。但那会很糟糕,所以我怀疑这是怎么回事,但我需要确认。
还有,请注意我的钱是class
,不是struct
。
DeepCopy是用来跟踪变化的这对于不可变类型来说是没有意义的所以你的实现对于所有不可变类型来说都是典型的
public bool IsMutable
{
get { return false; }
}
public object DeepCopy(object value)
{
return value;
}