Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动实现的获取/设置属性_C#_.net_Properties_Accessor_Automatic Properties - Fatal编程技术网

C# 自动实现的获取/设置属性

C# 自动实现的获取/设置属性,c#,.net,properties,accessor,automatic-properties,C#,.net,Properties,Accessor,Automatic Properties,让C#创建通过使用自动属性创建(即{get;set})生成的私有支持字段有什么不利之处吗 我知道它是自动的,因此您无法自定义get/set,我想知道是否还有其他含义 谢谢 我遇到的最大问题是,在查看绑定场景时,它通常非常有限。通常在使用数据绑定时,您需要实现自动属性不支持的数据绑定。最大的问题是,您无法使用支持字段,因为它们是由编译器创建的。这意味着您不能将它们声明为const或readonly,这意味着您不能在访问它们时添加逻辑(例如,延迟初始化),等等。好消息是,当您有理由时,从autopr

让C#创建通过使用自动属性创建(即{get;set})生成的私有支持字段有什么不利之处吗

我知道它是自动的,因此您无法自定义get/set,我想知道是否还有其他含义


谢谢

我遇到的最大问题是,在查看绑定场景时,它通常非常有限。通常在使用数据绑定时,您需要实现自动属性不支持的数据绑定。

最大的问题是,您无法使用支持字段,因为它们是由编译器创建的。这意味着您不能将它们声明为const或readonly,这意味着您不能在访问它们时添加逻辑(例如,延迟初始化),等等。好消息是,当您有理由时,从autoproperty开始可以使重构很容易地使用backing字段。

如果您使用的是
二进制格式化程序,请更改为(或从)自动实现的属性是一个突破性的变化,因为字段名对BF很重要。当然,有一个简单的解决办法:不要使用BF

您也不能使用自动属性向支持字段添加属性

没有字段初始化器

不存在与不变性一起使用的true
readonly

显然,你不能添加逻辑;无惰性、验证、副作用或通知事件

对于structs,您需要在自定义构造函数上调用
:this()
,这很难看


然而,除此之外,他们是伟大的。我是个超级粉丝。

这不是什么问题。如果发现需要某些功能或其他功能,以后可以轻松地将自动属性转换为手动属性。这不是一个突破性的变化。