2010-02-01 22 views
31

Soy nuevo en C# y estoy leyendo el código con /*!*/ en lo que parecen lugares extraños. Por ejemplo, los métodos de clases definidas como:¿Qué significa/*! */Mean en C#?

protected override OptionsParser/*!*/ CreateOptionsParser() 
protected override void ParseHostOptions(string/*!*/[]/*!*/ args) 

Desafortunadamente /*!*/ no es Googleable. Qué significa eso?

+4

bien, esto es divertido; ¿Por qué alguien debería poner tal comentario allí? –

+0

¿Dónde viste este código? ¿Es parte de un tutorial o un proyecto? Tal vez el código autogenerado? – ZoogieZork

+0

Es posible que desee buscar la causa en los editores que usaron sus predecesores. Algunas veces, los comentarios en lugares impares se usan para eludir los problemas de análisis de los editores destacados. (Solía ​​ser el caso con LPC y su sintaxis # '- lambda) – Leonidas

Respuesta

47

Es probable que sea un intento de obtener anotaciones de estilo de SpeC# en una compilación no especificada #. Los ! la anotación en SpeC# significa que el valor no es nulo. Es probable que el autor intente indicar que tanto los valores de retorno, la matriz args y todos los elementos en args son siempre valores no nulos.

SpeC# Enlace:

rápida SpeC# Descripción:

SpeC# es un lenguaje .Net creado a través de un proyecto de investigación de Microsoft. Es una extensión del lenguaje C# que intenta insertar contratos de código en el sistema de tipos. Los más destacados son los tipos que no admiten nulos (que se indican con! Después del nombre del tipo), las excepciones comprobadas y las condiciones pre/post.

+3

Otra forma de hacerlo es colocar 'Contract.Ensures (Contract.Result ()! = Null);' en el método, que idealmente aparecería en la documentación que lo acompaña. –

+0

@JaredPar: ¿podría completar algunos detalles más? ¿Qué es un # Spec-build? De las respuestas hasta ahora, este es el único que parece tener una pista sobre lo que está sucediendo. – jsbueno

+0

@jsbueno, agregó una descripción general rápida de SpeC#. La mejor explicación es en el enlace que agregué. Se puede encontrar documentación muy detallada allí. – JaredPar

19

Es un comentario que contiene un '!'

Cualquier cosa incluida en un/* */es un comentario que se ignorará cuando se compile el código.

0
/* is start comment 
*/ is end comment 

everything between is the comment 
you can even tell that SO highlights that area as a comment 
1

Es un comentario con '!'. Probablemente el programador quería asegurarse de haber notado que el primer método devolvía OptionsParser, y el segundo recibía una serie de cadenas, y no solo una cadena.

Puede eliminarlos, y van a seguir trabajando bien =)

1

Es sólo una delimited comment; probablemente su programador acaba de marcar esos puntos para discutir más adelante.

+0

¡guau! tantos votos abajo en cada _ respuesta; ¿algo mal? –

+0

He oído hablar de personas que tienen el hábito de rechazar cualquier otra respuesta cuando envían una, tal vez eso es lo que sucedió aquí. –

+1

Esta es una de las cosas malas de Stackoverflow: un chico/chica con un trastorno mental puede hacer cosas muy alocadas aquí. – Phil

0

Como todos dijeron, es un comentario. Además, me parece que el '!' se usa para la demarcación Parece ayudar a identificar puntos de interés y funciona como un caramelo.

+0

¡Esos corchetes son realmente interesantes! – jball

6

No conozco C# específicamente, ya que podría ser una notación especial para algo, pero utilizo una técnica similar en cualquier idioma que admite tokens de comentarios abiertos/cercanos, multilínea para permitirme comentar rápidamente y descomentar varias líneas con un solo cambio de carácter, así:

/*!*/ 
this is live code (and will probably cause a compilation error) 
/*!*/ 

/*!*/
this is commented code (and should never cause a compilation error) 
/*!*/ 

la razón de la ! se debe a que las construcciones son como /** fichas comunes utilizados por herramientas de documentación.

Existen otras técnicas, así cuando el lenguaje es compatible con una sola línea de comentario fichas, // (y las implementa como C++ y Java):

///* - opening comments can be commented-out so what follows isn't a comment. 
this is live code 
//*/ - closing comment are not commented-out by single-line comments. 

modo que lo pueda retirar la primera línea solo comentario símbolo , //, para producir una especie de "alternar":

/* this is now commented. 
this is also commented. 
//*/ this line is live code. 
+0

+1: no responde la pregunta, pero es realmente molesto^Wgreat hack :-) –