在 C# 中,对象初始化语法是否在赋值之前发生



在 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;
    }
}

_listGetIEnumerable返回时,当该方法在初始值设定项中被调用_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;

相关内容

  • 没有找到相关文章

最新更新