2010-01-29 76 views
7

我有一些类,它们有几种我并不真正想去的方法,但只是因为XML序列化程序需要它们。无论如何,如果从用户代码调用它们,会产生编译时错误/警告?有什么办法可以阻止在编译时调用的方法吗?

我知道我可以实现IXmlSerializable,而且我也知道我可以将这些类分离为纯数据存储类,但是,我并没有问我应该如何设计这样一个系统,我是简单地询问是否有一种方法来生成编译时错误/警告,如果他们是通过什么不是XML序列称为...

+0

另见http://stackoverflow.com/questions/968249/c-create-custom-warning-in-visual-studio-if-certain-method-is-used-in-source-co – 2010-01-29 09:28:16

回答

14

您可以添加

[Obsolete] 

的方法。 ObsoleteAttributeIsError属性控制是否生成错误或警告,并且您也可以提供解释性消息。

+0

非常好,谢谢 – 2010-01-29 09:28:09

+0

[Obsolete],与OP的意图不同。我不认为这是这个属性被用来使用的方式。 – 2010-01-29 09:28:13

+0

@Pop:当然,目的可能略有不同,但结果可能正是要求的。 – 2010-01-29 09:30:16

5

您可以使用ObsoleteAttribute修饰相关成员。它的意图有点不同,但从用户代码调用时会产生编译器警告(或错误)。

0

您可以使用[EditorBrowsable]属性隐藏用户intellisense中的方法,也可以使用[Browsable]属性从属性设计器中隐藏方法。

我不推荐使用[ObsoleteAttribute],因为它表达了实际状态的不同含义。而应使用注释,指出该方法不应在用户代码中使用。

而且请记住,有一些编译他们的代码威胁警告视为错误,这将使他们无法编译有效代码,在此情况下,用户的很多的。


+0

ObsoleteAttribute传达的含义稍有不同,但具有所需的行为。我认为EditorBrowsable实际上并不具有“你不应该从用户代码中调用它”的含义 - 也不会产生警告或错误,这是本例中所需的行为。 – 2010-01-29 09:41:57

+1

Jon的答案对我来说非常重要,因为我正在重构一些旧代码,并且我没有时间现在完全重新设计它,所以如果我能摆脱编译时错误的不良对象使用模式,这对我来说是一个巨大的胜利 - 当然不是理想的电脑禅宗的惊人之处,但是大获全胜。 – 2010-01-29 09:45:32

+0

@Matt Whitfield +1为实用主义 – 2010-01-29 10:52:41

相关问题