2010-02-01 22 views
31

Jestem nowy w C# i czytam kod z /*!*/ w czymś, co wydaje się dziwnymi miejscami. Dla metod klasy instancji zdefiniowane jako:Co znaczy/*! */W C#?

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

Niestety /*!*/ nie jest googleable. Co to znaczy?

+4

ok, to jest zabawa; Dlaczego ktokolwiek miałby umieścić tam taki komentarz? –

+0

Skąd widziałeś ten kod? Czy jest to część samouczka lub projektu? Może wygenerowany automatycznie kod? – ZoogieZork

+0

Możesz chcieć szukać przyczyny w edytorach używanych przez swoich poprzedników. Czasami komentarze w miejscach nieparzystych służą do omijania problemów z analizowaniem podświetlanych edytorów. (Używany w przypadku LPC i jego # '- składnia lambda) – Leonidas

Odpowiedz

47

Najprawdopodobniej jest to próba uzyskania adnotacji stylu SpeC# w kompilacji innej niż SpeC#. The! adnotacja w SpeC# oznacza, że ​​wartość nie jest równa-null. Autor prawdopodobnie próbuje wskazać, że zarówno wartości zwracane, tablica args i wszystkie elementy w args są zawsze wartościami innymi niż null.

SpeC# Link:

Szybka SpeC# Przegląd:

SpeC# jest językiem Net stworzony przez projekt badawczy firmy Microsoft. Jest rozszerzeniem języka C#, który próbuje osadzić umowy kodu w systemie typów. Najważniejsze to typy nie podlegające zerowaniu (oznaczone po nazwie typu), sprawdzone wyjątki i warunki przed/po.

+3

Innym sposobem na to jest miejsce 'Contract.Ensures (Contract.Result ()! = Null); w metodzie, która najlepiej pojawi się w dołączonej dokumentacji. –

+0

@JaredPar: czy mógłbyś podać więcej szczegółów? Co to jest # Spec-build? Z dotychczasowych odpowiedzi jest to jedyna, która wydaje się mieć klucz do tego, co się dzieje. – jsbueno

+0

@jsbueno, dodano krótki przegląd SpeC#. Najlepszym wyjaśnieniem jest jednak link, który dodałem. Można tam znaleźć bardzo szczegółową dokumentację. – JaredPar

19

To komentarz zawierający "!"

Wszystko zawarte w/* */jest komentarzem, który zostanie zignorowany podczas kompilacji kodu.

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

To jest komentarz z "!". Prawdopodobnie programista chciał się upewnić, że zauważyłeś, że pierwsza metoda zwróciła OptionParser, a druga otrzymała tablicę ciągów, a nie tylko ciąg.

Można je usunąć, a oni nadal działają dobrze =)

1

To tylko delimited comment; prawdopodobnie twój programista właśnie zaznaczył te punkty, aby omówić to później.

+0

wow! tyle spadków w odpowiedzi; coś źle? –

+0

Słyszałem o ludziach, którzy robią nawyk odrzucania każdej innej odpowiedzi, gdy ją przedkładają - może to właśnie się tutaj wydarzyło. –

+1

To jedna z najgorszych rzeczy na temat stackoverflow - facet/gal z zaburzeniami psychicznymi może robić tu bardzo szalone rzeczy. – Phil

0

Jak wszyscy mówili, to jest komentarz. Dodatkowo wydaje mi się, że "!" służy do rozgraniczenia. Wygląda na to, że pomaga w określeniu punktów szczególnych i służy jako cukierek do oczu.

+0

Te nawiasy są interesujące! – jball

6

Nie znam konkretnej nazwy C#, ponieważ może to być specjalna notacja dla czegoś, ale używam podobnej techniki w dowolnym języku, który obsługuje otwarte/zamknięte, wieloliniowe tokeny komentarza, aby umożliwić mi szybkie komentowanie i Odkomentuj wielokrotne linie z pojedynczej zmiany charakteru, tak jak poniżej:

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

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

powodem ! dlatego konstrukty jak /** są wspólne tokeny używane przez narzędzia dokumentacji.

Istnieją inne techniki, jak również wtedy, gdy język obsługuje komentarz znaki pojedynczej linii, // (i wdraża je jak C++ i 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. 

Więc można następnie usunąć pierwszy pojedynczej linii komentarz tokena , //, aby wyprodukować rodzaj "przełączania":

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

+1: nie odpowiada na pytanie, ale jest naprawdę nieprzyjemny^Wgreat hack :-) –