2010-02-01 2 views
31

Я новичок в C# и читаю код с /*!*/ в том, что кажется странным местом. Для методов экземпляра класса определяется как:Что означает/*! */Mean в C#?

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

К сожалению /*!*/ не googleable. Что это значит?

+4

ОК, это весело; Зачем кому-то писать такой комментарий? –

+0

Где вы видите этот код? Это часть учебника или проекта? Может быть, сгенерированный автоматически код? – ZoogieZork

+0

Возможно, вы захотите найти причину в редакторах, которые использовали ваши предшественники. Иногда комментарии в нечетных местах используются для того, чтобы обойти проблемы синтаксического анализа, выделяющие редакторов. (Используется в случае с LPC и его синтаксисом # lambda) – Leonidas

ответ

47

Скорее всего, попытка получить аннотации SpeC# style к нестандартной конструкции #. ! аннотация в SpeC# означает, что значение не-null. Вероятно, автор пытается указать, что как возвращаемые значения, массив args, так и все элементы в args всегда являются ненулевыми значениями.

SpeC# Ссылка:

Quick SpeC# Обзор:

SpeC# является .Net язык, созданный с помощью научно-исследовательского проекта Microsoft. Это расширение языка C#, которое пытается встраивать кодовые контракты в систему типов. Наиболее видными являются типы с недействительными (обозначаются символом! После имени типа), отмечены исключения и условия до/после.

+3

Другой способ сделать это: «Contract.Ensures (Contract.Result ()! = Null);' в методе, который идеально отображался в сопроводительной документации. –

+0

@JaredPar: можно заполнить более подробную информацию? Что такое # Spec-build? Из ответов до сих пор это единственное, что, похоже, подсказывает, что происходит. – jsbueno

+0

@jsbueno, добавлен краткий обзор SpeC#. Лучшее объяснение, хотя есть по ссылке, которую я добавил. Там можно найти очень подробную документацию. – JaredPar

19

Это комментарий, который содержит '!'

Все, что заключено в/* * /, является комментарием, который будет игнорироваться при компиляции кода.

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

Это комментарий к '!'. Вероятно, программист хотел убедиться, что вы заметили, что первый метод возвратил OptionParser, а второй получил массив строк, а не только строку.

Вы можете удалить их, и они будут продолжать работать нормально =)

1

Это просто delimited comment; вероятно, ваш программист просто отметил, что пункты для обсуждения позже.

+0

ничего себе! так много downvotes в каждом ответе; что-то не так? –

+0

Я слышал о людях, которые привыкли отрицать каждый ответ, когда они подают один - может быть, вот что произошло здесь. –

+1

Это одна из плохих вещей о stackoverflow - парень/девочка с психическим расстройством могут делать очень сумасшедшие вещи здесь. – Phil

0

Как все говорили, это комментарий. Кроме того, мне кажется, что '!' используется для демаркации. Похоже, что он помогает выявлять интересующие вас предметы и служит для глазных конфет.

+0

Эти скобки наверняка интересны! – jball

6

Я не знаю о C# специально, поскольку это может быть специальная нотация для чего-то, но я использую подобную технику на любом языке, который поддерживает токены с открытым/закрытым многострочным комментарием, чтобы я мог быстро комментировать и раскомментировать несколько строк с одним изменением характера, например:

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

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

причина ! потому, что конструкции, как /** общие маркеры, используемыми инструментами документирования.

Существуют и другие методы, а когда язык поддерживает однострочный комментарий лексем, // (и реализует их, как C++ и 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. 

Таким образом, вы можете удалить первый однострочный комментарий маркер , //, для производства своего рода «переключателя»:

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

+1: не отвечает на вопрос, но это действительно противный^Wgreat hack :-) –

Смежные вопросы