含副作用方法的C#对象字段初始化顺序是否有明确保证?
C#对象初始化器的成员赋值顺序问题
绝对保证X会在Y之前完成读取与初始化。
C#语言规范明确规定,对象初始化器中的成员赋值操作严格按照代码书写的顺序依次执行,不存在类似C++中方法参数求值顺序不确定的情况。在你给出的代码场景里:
public class foo { private ECPoint point = new ECPoint() { X = MethodCall(), Y = MethodCall() } }
X = MethodCall()会先被执行,完成ECPoint实例的X字段初始化后,才会执行Y = MethodCall()。两次MethodCall()的调用顺序完全由代码中的书写顺序决定,不会出现乱序执行的情况,因此你可以放心依赖这个顺序来处理MemoryStream的指针移动逻辑。
内容的提问来源于stack exchange,提问作者The Welder
相关产品推荐
相关产品推荐

