在C#中使用显式接口防止意外修改属性我偶然发现了C#方法解决方案的一个特性,之前我没有注意到。也就是说,当我显式实现一个支持setter的接口,而隐式接口只提供一个受保护的集合时,编译器在我调用它时会明智地尊重受保护的集合。因此,我获得了自动实现属性的大部分便利,但我防止了客户意外修改不应更改字段的字段。例如,virtualpublicDateTimeCreatedOn{get;保护集;}虚拟公共日期时间?ModifiedOn{得到;保护集;}#regionIHaveUpdateDateFields成员DateTimeIHaveUpdateDateFields.CreatedOn{get{returnthis.CreatedOn;}设置{this.CreatedOn=value;}}约会时间?IHaveUpdateDateFields.ModifiedOn{get{returnthis.ModifiedOn;}设置{this.ModifiedOn=value;然后我的模型绑定代码不会意外设置日期,但我的ORM事件侦听器可以检查实现IHaveUpdateDateFields的实体并设置日期以保留我的实体。我的问题是:我是依赖定义的行为,还是保证所有C#编译器都将以这种方式解析方法?我不想发现C#标准说这个方法解析是未定义的,然后在我为Mono构建时意外地得到可怕的堆栈溢出。有没有更好的(最好是更简洁的)方法来做到这一点?我可以将ModelBinder安全接口传递给我的控制器,但这似乎并没有保存我的代码,而且我不认为它提供了一种透明的方式来最大限度地减少属性的意外修改。这是完全明确的;使用接口时,显式接口实现优先,而常规属性生效(包括在get/set体内)。至于让它更整洁……我能提供的最好的办法是重新格式化它以减少冗长……DateTimeIHaveUpdateDateFields.CreatedOn{get{returnCreatedOn;}set{CreatedOn=value;(另请注意,这是隐含的和多余的)除此之外-安全性只是一种便利,而不是保证......外部调用者仍然可以使用你的界面,并且经常(ab)可以使用反射来跳过单纯的受保护的东西-甚至直接设置字段。以上就是C#学习教程:在C#中使用显式接口防止意外修改属性。分享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
