这已经完全让我失望了,显然下面的代码是合法的,更令人惊讶的是从框架 2 开始是合法的......
public class Magic
{
private readonly int _anInt;
private readonly string _aString;
public Magic(int anInt, string aString)
{
_anInt = anInt;
_aString = aString;
}
public Magic(Magic toCopy)
{
_anInt = toCopy._anInt; // Legal!
_aString = toCopy._aString; // Legal!
}
public void DoesntWorkMagic(Magic toCopy)
{
_anInt = toCopy._anInt; // edit: Will work if not readonly.
_aString = toCopy._aString;
}
public int AnInt { get { return _anInt; } }
public string AString { get { return _aString; } }
}
这是怎么回事?这些年来,我看到这么多复制构造函数做多余的工作,在我遇到它之前我不会相信这项工作。它的使用是否有任何警告(除了明显的线程问题)?