C# 属性限制

标签 c# .net-2.0 attributes

是否可以限制特定类中应用属性的属性数量?

最佳答案

编译时没有。

在运行时,您可以通过静态初始化程序来验证这一点,如果违反了这个不变量,它会抛出异常,尽管这会被认为是非常糟糕的风格,但从某种意义上说,当不变量不成立时,没有代码可以执行,因此它是安全的。

如果您考虑 .Net 固有的可扩展性,即使您可以在编译时验证这一点,想象一下:

编译dll A

public class Foo 
{
     public int Property1 {get;}
} 

使用类编译引用 A.dll 的 dll B

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 之一或两者“非法”。

因此,您不应期望框架中会提供此功能。

关于C# 属性限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/774849/

相关文章:

.net - 这是什么控制?带下拉菜单的("Open"按钮)

php - 可配置产品中的 Magento 属性排序顺序

c# - NUnit 自定义属性同时表现为 TestAttribute 和 CategoryAttribute

c# - 创建/获取 TableMapping 映射以发送到 SQLiteAsyncConnection.DeleteAll()

c# - 调用 Game.Exit() 后 XNA 游戏未退出

c# - 在 filenotfound 上捕获异常

asp.net - PostedFile.FileName 在 .Net 4.0 中的工作方式是否有所不同?

c# - 使用字符串中的名称获取变量的值

javascript - 在纯 JavaScript 中自动计算数据属性的总和

c# - 在异步 WCF 响应线程上使用 PRISM 4 请求 UI 导航