繁体   English   中英

C#属性限制

[英]C# Attribute Limit

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

在编译时没有。

在运行时,您可以通过静态初始化程序对此进行验证,该静态初始化程序将在违反此不变式的情况下抛出该异常,尽管这将被认为是非常糟糕的样式,但在不保留不变式的情况下不会执行任何代码的意义上,这是安全的。

如果您考虑.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中的一个或两个都“非法”。

因此,您不应期望它在框架中可用。

我认为在编译时不可能。 但是您可以向实例构造函数或静态构造函数中添加一些代码,以在运行时通过反射对其进行检查。

如果在编译时(或之后)很重要,则应创建FxCop规则或自定义搜索属性(类似于[OnlyOnceAttribute]之类的模式)。

findstr "[OnlyOnceAttribute]" *.cs

findstr实用工具返回匹配的行。 您只需要一个捕获行数并将错误返回给调用方的批处理文件(= MSBuild Task),构建就会失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM