在 c# 中,对象初始化如下所示:
var thing = new List<object>() {new object()};
在分配之前发生,因此它大致与:
var _thing = new List<object>();
_thing.Add(new object());
var thing = _thing;
或者它是否发生在分配之后,因此它大致与:
var thing = new List<object>();
thing.Add(new object());
如果您尝试在工厂中打递归结,这将有所不同,例如:
static class AbstractFactory {
private static readonly IEnumerable<object> _list = new List<object>() {GetIEnumerable()};
public static IEnumerable<object> GetIEnumerable() {
return _list;
}
}
当_list
从GetIEnumerable
返回时,当该方法在初始值设定项中被调用_list
时,它是new List<object>
、null
还是未定义?
它编译为第一个示例,即 object initialization occurs before assignment
.
您可以使用 .Net Reflector 查看编译版本。它编译到这个(使用反射器提取)-
List<object> <>g__initLocal0 = new List<object>();
<>g__initLocal0.Add(new object());
List<object> thing = <>g__initLocal0;