有没有办法访问属性的支持字段,以便进行验证,更改跟踪等?
是否有类似以下内容?如果没有,是否有计划在.NET 4/C#4中使用它?
public string Name { get; set { if (value !=) { RaiseEvent(); } = value; } }
我遇到的主要问题是使用自动属性不允许在具有明确支持字段的属性的验证等方面具有相同的灵活性.然而,显式支持字段在某些情况下具有缺点,即允许其所包含的类在访问和重用属性的验证,更改跟踪等时访问支持字段,就像可能正在访问的任何其他类一样外部的财产.
在上面的示例中,对支持字段的访问将限定为属性,从而防止绕过属性验证,更改跟踪等.
编辑:我已将
不,没有.如果要访问支持字段,请不要使用自动属性并自行滚动.
我同意,拥有一个只能由财产而不是其他同类人员访问的字段会很棒.我会一直使用它.
正如MSDN所述:
"在C#3.0及更高版本中,当属性访问器中不需要额外的逻辑时,自动实现的属性使属性声明更简洁.它们还使客户端代码能够创建对象当您声明属性时,如以下示例所示,编译器创建一个私有的,匿名的后备字段只能通过属性的get和set访问器来访问."
由于在访问器中有其他逻辑,因此在您的方案中使用自动实现的属性是不合适的.
虽然支持字段确实存在,但它会被赋予一个错误的名称以阻止您轻松引用它 - 这个想法是您永远不会直接引用该字段.为了利益起见,您可以使用Reflector来反汇编代码并发现字段名称,但我建议您不要直接使用该字段,因为此名称可能确实存在易变性,因此您的代码可能随时中断.