2010-01-29 7 views
7

Tengo algunas clases, que tienen varios métodos que realmente no quiero que estén allí, pero simplemente porque XML Serializer los necesita. ¿Hay alguna forma de generar errores/advertencias en tiempo de compilación si son llamados desde el código de usuario?¿Hay alguna manera de detener la invocación de un método en tiempo de compilación?

Soy consciente de que puedo implementar IXmlSerializable, y también sé que puedo separar las clases en clases de almacenamiento de datos puramente, sin embargo, no estoy haciendo una pregunta acerca de cómo debería diseñar un sistema así, soy simplemente preguntando si hay una manera de generar errores en tiempo de compilación/advertencias si se les llama por cualquier cosa que no es el serializador XML ...

+0

Véase también http://stackoverflow.com/questions/968249/c-create-custom-warning-in-visual-studio-if-certain-method-is-used-in-source-co –

Respuesta

14

Puedes añadir

[Obsolete] 

al método. La propiedad IsError de ObsoleteAttribute controla si se genera un error o una advertencia, y también puede proporcionar un mensaje explicativo.

+0

Excelente, gracias –

+0

[Obsoleto], tiene un propósito diferente al que OP tiene previsto. No creo que esta sea la forma en que se pretende usar este atributo. –

+0

@Pop: seguro, el propósito es tal vez un poco diferente, pero el resultado es, probablemente, exactamente lo que se solicitó. –

5

Puede decorar los miembros en cuestión con ObsoleteAttribute. Su intención es un poco diferente, pero generará advertencias (o errores) en el compilador cuando se invoque desde el código de usuario.

0

Puede ocultar los métodos de los usuarios intellisense utilizando el atributo [EditorBrowsable], y del diseñador de propiedades usando [Browsable], atributo.

No recomiendo usar [ObsoleteAttribute], ya que transmite un significado diferente al estado del método en realidad. En su lugar, use un comentario que indique que el método no se debe usar desde el código de usuario.

También hay que tener en cuenta que hay mucho de la de los usuarios que compilan su código con advertencias de amenazas como errores, lo que hará imposible que se compilan válida código, en este caso.


+0

ObsoleteAttribute transmite un significado ligeramente diferente, pero tiene el comportamiento deseado. Argumentaría que EditorBrowsable en realidad no tiene el significado de "usted no debe llamar esto desde el código de usuario" tampoco, y no genera advertencias o errores, que es el comportamiento deseado en este caso. –

+1

La respuesta de Jon es bastante acertada para mí, porque estoy refabricando un código viejo, y no tengo tiempo para rediseñarlo por completo ahora mismo, así que si puedo sacudir los patrones de uso de objetos pobres con errores de tiempo de compilación , eso es una gran victoria para mí, sin duda no es la increíble calidad informática zen, pero una gran victoria, no obstante. –

+0

@Matt Whitfield +1 por el pragmatismo –

Cuestiones relacionadas