是否可以知道属性的访问者是否是默认的?

时间:2014-03-04 10:20:07

标签: c# reflection

我使用的属性只能附加到具有默认访问器的属性, 我试图以编程方式强制执行此编码约定。

这应该是有效的:

[Landing]
public int N {get; set;}

这应该是无效的:

[Landing]
public int N {get {return n;} set{n=value+1;}}

如何检查代码是否有效,即使只是在运行时?

2 个答案:

答案 0 :(得分:2)

我认为你不能(没有离谱的黑客行为)。属性的重点是隐藏getter和setter实现,因此它是隐藏的。

为什么后一个例子无效?也许你也可以处理它?如果没有,您是否考虑使用公共字段而不是属性?这些将始终是标准的。

答案 1 :(得分:1)

对于自动属性,编译器只为您生成支持字段,因此您在运行时可以发现的自动属性没有什么特别之处。

您可以尝试设置然后获取值以查看它是否相同,但这并不能证明实现中没有额外的代码。

例如,如果setter在存储值之前触发了一个事件,你会没事吗?财产实施可以做很多非常有效的事情......