2010-02-01 34 views
31

Sono nuovo di C# e sto leggendo codice con /*!*/ in quello sembrare posti strani. Per i metodi di classe istanza definite come:Cosa significa/*! */Significa in C#?

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

Purtroppo /*!*/ non è Googleable. Cosa significa?

+4

ok, questo è divertente; Perché qualcuno dovrebbe mettere un tale commento lì? –

+0

Dove hai visto questo codice? Fa parte di un tutorial o di un progetto? Forse il codice generato automaticamente? – ZoogieZork

+0

Si potrebbe voler cercare la causa negli editor utilizzati dai predecessori. A volte i commenti in posti strani vengono usati per aggirare i problemi di parsing degli editor di evidenziazione. (Usato per essere il caso con LPC e la sua # '- sintassi lambda) – Leonidas

risposta

47

E 'probabile un tentativo di ottenere Spec annotazioni # stile in un non-SpeC# build. Il ! l'annotazione in SpeC# indica che il valore non è nullo. L'autore è probabile cercando di indicare che sia il valori restituiti, args array e tutti gli elementi in args sono sempre valori non nulli.

SpeC# Link:

rapida SpeC# Panoramica:

SpeC# è un linguaggio .Net creato tramite un progetto di Microsoft Research. È un'estensione del linguaggio C# che tenta di incorporare i contratti di codice nel sistema di tipi. I più importanti sono i tipi non nullable (indicati con! Dopo il nome del tipo), controllato eccezioni e le condizioni pre/post.

+3

Un altro modo per farlo è inserire 'Contract.Ensures (Contract.Result ()! = Null);' nel metodo, che sarebbe idealmente mostrato nella documentazione di accompagnamento. –

+0

@JaredPar: potrebbe inserire ulteriori dettagli? Cos'è una # Spec-build? Dalle risposte finora, questo è l'unico che sembra avere la minima idea di cosa sta succedendo. – jsbueno

+0

@jsbueno, ha aggiunto una rapida panoramica di SpeC#. La migliore spiegazione è però al link che ho aggiunto. La documentazione molto dettagliata può essere trovata lì. – JaredPar

19

E 'un commento che contiene un '!'

Tutto racchiuso in un/* */è un commento che verrà ignorato quando il codice viene compilato.

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

Si tratta di un commento con '!'. Probabilmente il programmatore voleva assicurarsi di aver notato che il primo metodo restituiva un OptionsParser e che il secondo riceveva una serie di stringhe e non solo una stringa.

È possibile rimuoverli, e faranno continuare a funzionare bene =)

1

E 'solo un delimited comment; probabilmente il tuo programmatore ha appena segnato quel punto per discuterne in seguito.

+0

Eeeek !!! così tanti downvotes in ogni risposta; Qualcosa non va? –

+0

Ho sentito parlare di persone che hanno l'abitudine di downvoting ogni altra risposta quando ne presentano una - forse è quello che è successo qui. –

+1

Questa è una delle cose brutte dello stackoverflow: un ragazzo/ragazza con un disturbo mentale può fare cose molto pazze qui. – Phil

0

Come tutti hanno detto, è un commento. Inoltre, mi sembra che il '!' è usato per demarcazione. Sembra essere di aiuto nell'individuare i punti di interesse e serve come piacere per gli occhi.

+0

Queste parentesi sono sicuramente interessanti! – jball

6

Non so su C# in modo specifico, in quanto potrebbe essere una notazione speciale per qualcosa, ma io uso una tecnica simile in qualsiasi linguaggio che supporti i token di apertura/chiusura, commenti a più righe per permettermi di commentare rapidamente e decommentate linee multiple con una singola modifica personaggio, in questo modo:

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

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

il motivo per il ! è perché costrutti come /** sono gettoni comuni utilizzati da strumenti di documentazione.

Ci sono altre tecniche come pure quando il linguaggio supporta una sola riga di commento gettoni, // (e li implementa come C++ e 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. 

in modo da poter rimuovere il primo singolo-riga di commento Token , //, per produrre un tipo di "toggle":

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

+1: non risponde alla domanda, ma è un vero e proprio brutto ... Wgreat mod :-) –