这是允许的, 它会以新的对象覆盖当前对象的值, 对于值类型, 这会发生什么事?
如果field是ValueType, 直接copy其副本,生成的新对象将拥有一份独立的copy, 如果是reference对象, 则只复制其引用, 当前this对象是该field只是指向别人的对象。
struct MyValueType
{
int i;
string s;
public void Assign(ref MyValueType another)
{
*this = another;
}
};
在如上的普通代码中, 似乎并不需要这样一个函数,但在我的代码中通过reflection实现的通用反序列化函数中,就需要这样一个赋值:
struct MyValueType
{
public void FromXml()
{
*this = (MyValueType)AppOptions.XmlToObject(typeof(MyValueType, doc) );
}
}
为了通有的目的, 这个反序列化函数只能返回object类型, 这样就必需要有一次unboxing.
阅读(953) | 评论(0) | 转发(0) |