实施例: 我有一个名为“Title”的1个属性(通过Property Grid可编辑的属性)的用户控件。 如果属性“Title”为空,有一种方法可以抛出编译时异常吗?或者所有设计时属性都是可选的?
答案 0 :(得分:3)
在编译时无法确保设置特定属性。如果编译代码,您可以使用#error指令导致编译时错误或#warning编译时警告。但这不是您想要的。
确保设置特定属性或方法有两种方法。第一种是在构造函数中要求它或检查它是否已在后续方法或属性中设置。这是运行时检查,而不是编译时间,正如您所说,您在UserControl中有一些限制。
第二种方法是使用像FXCop这样的代码分析工具。您可以编写一个自定义规则来标识UserControl的所有实例,并确保已在所有实例上设置该属性。也可以使用Roslyn或PostSharp,但我对这些工具不够熟悉。
像FXCop这样的代码分析工具存在一个相当陡峭的学习曲线。编程语言很复杂,这些工具需要暴露复杂性。我的建议是使用默认值,例如“在此处插入标题”,或者,即使没有合适的默认值,也会在使用描述性消息呈现控件时抛出异常。
有关类似案例,请参阅Good way to ensure that a property on a UserControl gets set?。