是否可以限制特定类中应用属性的属性数量?
最佳答案
编译时没有。
在运行时,您可以通过静态初始化程序来验证这一点,如果违反了这个不变量,它会抛出异常,尽管这会被认为是非常糟糕的风格,但从某种意义上说,当不变量不成立时,没有代码可以执行,因此它是安全的。
如果您考虑 .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/