是否可以限制属性在特定类中应用的数量?C#属性限制
Q
C#属性限制
2
A
回答
3
在编译时没有。
在运行时你可以通过一个静态初始化器来验证它,如果这个不变量被违反,这个静态初始化器将会抛出,尽管这会被认为是非常糟糕的风格,它将是安全的,因为在不变量不成立时不能执行代码。
如果你对扩展固有的.Net,即使你可以在编译时验证这一点想象:
编译DLL中的一个与
public class Foo
{
public int Property1 {get;}
}
编译DLL乙引用A.DLL与
类public class Bar
{
[OnlyOneAllowedOnAnyPropertiesPerClass]
public int Property2 {get;}
}
然后重新编译A.DLL与
public class Foo
{
[OnlyOneAllowedOnAnyPropertiesPerClass]
public int Property1 {get;}
}
并尝试运行与老B.DLL这个新A.DLL(它们是二进制兼容的在所有其他方面,所以这是很好)
显然,运行时会做很大的努力健全检查这,不提及B可能会突然加载一段时间使A和B之一或两者“非法”。
因此,您不应该期望这个功能在框架中可用。
1
我不认为这是可能的在编译时。但是你可以添加一些代码给实例构造函数或者一个静态构造函数,它在运行时通过反射来检查它。
1
如果它是重要的(或右后)编译的时候,你应该创建一个FxCop规则或为您的属性(模式像[OnlyOnceAttribute])自定义搜索。
findstr "[OnlyOnceAttribute]" *.cs
的FINDSTR实用程序将返回匹配的线。您只需要一个批处理文件来捕获行数并且get back错误给调用者(= MSBuild任务),并且构建失败。
+0
不错的想法,但请注意,部分类和继承都会颠覆这一点,并且文件中的多个类会导致误报。 只要您有权访问编译后的总代码库,就可以使用正确的FxCop规则。 – ShuggyCoUk 2009-04-21 23:09:22
相关问题
- 1. XSD属性限制
- 2. 限制基于属性
- 3. 限制属性值与XSD
- 4. 限制@RequestBody的JSON属性
- 5. 限制类和类属性
- 6. Java注释属性限制
- 7. 对象属性限制 - jena
- 8. 在Rails中限制属性
- 9. Protégé对象属性限制
- 10. XSD属性限制和值
- 11. 限制属性类型
- 12. xsd限制和属性
- 13. C#属性的强制性属性
- 14. vb.net C#属性overiding机制
- 15. 限制对继承属性的访问C#
- 16. C#通用属性限制的解决方法
- 17. 限制属性值子属性(参考现有值)
- 18. 允许/限制基于其他属性的XML属性
- 19. 限制自定义属性的属性类型
- 20. 限制XML属性不同属性的/元素的值
- 21. XSD - 限制属性值到另一个元素属性值
- 22. 将属性限制为类或属性可行吗?
- 23. 限制属性值取决于另一个属性
- 24. 存储在HTTPSession中的属性限制
- 25. 限制JSON模式中的属性
- 26. 限制多次使用的子属性
- 27. 限制XML属性的枚举值
- 28. XSD.exe限制基类型属性
- 29. XSLT复制受限于属性值对
- 30. 通过多个属性限制结果
号为什么你想这样做? – 2011-05-23 03:19:32