关于C#6中的支持字段类型

关于C#6中的支持字段类型,c#,C#,在C#6中,我们可以为自动属性指定内嵌值。由于这些自动属性的值直接设置为backing字段(不带setter),我可以假定backing字段是“静态类型”吗?如果我错了,有人能解释一下如何将值分配给支持字段吗?编译器在哪个阶段将内联属性指定给属性 class ProDemo { public string Name { get; set; } = "Jon"; } 有人能解释一下,在比较以前版本的C#时,自动属性在C#6中的实现有何不同吗?这是: class

在C#6中,我们可以为自动属性指定内嵌值。由于这些自动属性的值直接设置为backing字段(不带setter),我可以假定backing字段是“静态类型”吗?如果我错了,有人能解释一下如何将值分配给支持字段吗?编译器在哪个阶段将内联属性指定给属性

class ProDemo 
{            
    public string Name { get; set; } = "Jon";
}
有人能解释一下,在比较以前版本的C#时,自动属性在C#6中的实现有何不同吗?

这是:

class ProDemo 
{            
    public string Name { get; set; } = "Jon";
}
编译为:

class ProDemo 
{        
    private string _name = "Jon";
    public string get_Name() { return _name; }
    public void set_Name(string value) { _name = value; }
}
这与静态类型没有任何关系。

这是:

class ProDemo 
{            
    public string Name { get; set; } = "Jon";
}
编译为:

class ProDemo 
{        
    private string _name = "Jon";
    public string get_Name() { return _name; }
    public void set_Name(string value) { _name = value; }
}
这与静态类型没有任何关系。

这是:

class ProDemo 
{            
    public string Name { get; set; } = "Jon";
}
编译为:

class ProDemo 
{        
    private string _name = "Jon";
    public string get_Name() { return _name; }
    public void set_Name(string value) { _name = value; }
}
这与静态类型没有任何关系。

这是:

class ProDemo 
{            
    public string Name { get; set; } = "Jon";
}
编译为:

class ProDemo 
{        
    private string _name = "Jon";
    public string get_Name() { return _name; }
    public void set_Name(string value) { _name = value; }
}


这与静态类型没有任何关系。

Ok。在这种情况下,为什么下面的赋值不起作用//字段初始值设定项不能引用非静态字段公共字符串名称{get;set;}=AnotherInstanceName;根据文档,它没有通过setters设置这样的行内赋值。@Nair它不起作用的原因与它在这个答案的第二个片段中不起作用的原因完全相同,这是它在概念上转换成的。尝试对字段初始值设定项执行相同的操作,但失败的原因完全相同。@Servy,非常感谢您的版本。我知道这在过去是如何在内部实施的。但是,我想理解的是,在c#6.0中,这与在线作业有什么不同。@Servy,如果我认为你的观点是正确的,那么我们过去为什么不能做在线作业?好的。在这种情况下,为什么下面的赋值不起作用//字段初始值设定项不能引用非静态字段公共字符串名称{get;set;}=AnotherInstanceName;根据文档,它没有通过setters设置这样的行内赋值。@Nair它不起作用的原因与它在这个答案的第二个片段中不起作用的原因完全相同,这是它在概念上转换成的。尝试对字段初始值设定项执行相同的操作,但失败的原因完全相同。@Servy,非常感谢您的版本。我知道这在过去是如何在内部实施的。但是,我想理解的是,在c#6.0中,这与在线作业有什么不同。@Servy,如果我认为你的观点是正确的,那么我们过去为什么不能做在线作业?好的。在这种情况下,为什么下面的赋值不起作用//字段初始值设定项不能引用非静态字段公共字符串名称{get;set;}=AnotherInstanceName;根据文档,它没有通过setters设置这样的行内赋值。@Nair它不起作用的原因与它在这个答案的第二个片段中不起作用的原因完全相同,这是它在概念上转换成的。尝试对字段初始值设定项执行相同的操作,但失败的原因完全相同。@Servy,非常感谢您的版本。我知道这在过去是如何在内部实施的。但是,我想理解的是,在c#6.0中,这与在线作业有什么不同。@Servy,如果我认为你的观点是正确的,那么我们过去为什么不能做在线作业?好的。在这种情况下,为什么下面的赋值不起作用//字段初始值设定项不能引用非静态字段公共字符串名称{get;set;}=AnotherInstanceName;根据文档,它没有通过setters设置这样的行内赋值。@Nair它不起作用的原因与它在这个答案的第二个片段中不起作用的原因完全相同,这是它在概念上转换成的。尝试对字段初始值设定项执行相同的操作,但失败的原因完全相同。@Servy,非常感谢您的版本。我知道这在过去是如何在内部实施的。但是,我想了解的是,在c#6.0中,这与促进as在线作业有什么不同。@Servy,如果我认为你的观点是正确的,那么为什么我们在过去不能进行在线赋值?为什么作者获得了-3票?使用ILSpy它将帮助你理解编译器如何更改场景背后的代码为什么作者获得了-3票?使用ILSpy它将帮助你理解编译器如何更改场景背后的代码为什么作者获得了-3票投票?使用ILSpy它将帮助您了解编译器如何更改场景背后的代码为什么作者获得-3票?使用ILSpy它将帮助您了解编译器如何更改场景背后的代码