0

示例:我有一个具有 1 个属性(可通过属性网格编辑)的用户控件,称为“标题”。如果属性“Title”为空,有没有办法抛出编译时异常?还是所有设计时属性都是可选的?

4

1 回答 1

3

在编译时无法确保设置了特定属性。如果代码已编译,您可以使用#error指令导致编译时错误或使用#warning发出编译时警告,但这不是您想要的。

有两种方法可以确保设置特定的属性或方法。第一种是在构造函数中要求它或检查它是否已在后续方法或属性中设置。这是运行时检查,而不是编译时间,正如您所说,您在 UserControl 中有某些限制。

第二种方法是使用FXCop之类的代码分析工具。您可以编写一个自定义规则来识别您的 UserControl 的所有实例并确保已在所有实例上设置了该属性。Roslyn或 PostSharp也有可能,但我对这些工具还不够熟悉,不能这么说。

像 FXCop 这样的代码分析工具的问题是学习曲线相当陡峭。编程语言很复杂,这些工具需要暴露复杂性。我的建议是使用像“在此处插入标题”这样的默认值,或者即使没有合适的默认值,也不太可能在使用描述性消息呈现控件时抛出异常。

请参阅确保设置 UserControl 上的属性的好方法?对于类似的情况。

于 2013-01-02T12:31:23.543 回答