我正在阅读有关“C#9.0 中的新增功能”的开发博客,然后我注意到“with expression”。
\n\npublic data class Person\n{\n public string FirstName { get; init; }\n public string LastName { get; init; }\n}\nvar otherPerson = person with { LastName = "Hanselman" };\nRun Code Online (Sandbox Code Playgroud)\n\n他们说
\n\n\n\n\n记录隐式定义受保护的 \xe2\x80\x9ccopy 构造函数\xe2\x80\x9d \xe2\x80\x93 一个构造函数,该构造函数接受现有记录对象并将其逐个字段复制到新记录对象:
\n
protected Person(Person original) { /* copy all the fields */ } // generated\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\nwith 表达式导致调用复制构造函数,然后在顶部应用对象初始值设定项以相应地更改属性。
\n
我的问题是,\n“with”是否从“堆”复制整个旧对象,然后用新值(如果存在)修改它们,然后创建新实例?(IMO...我认为这是一种昂贵的方法)\nor“with”是否会让您只写更少的行而没有任何内存泄漏?
\n\n如果我的第一个假设是正确的,那么使用“with”或“new”会更好,例如:var obj = new foo();