Комментарии

41

Комментарии являются немаловажной частью любого языка программирования, т.к. позволяют удобно пояснять различные участки кода. В C# используются традиционные комментарии в стиле С — однострочные (//...) и многострочные (/* . . . */):

// Это однострочный комментарий
/* Это уже
многострочный комментарий */

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

Многострочный комментарий можно помещать в одну строку кода:

Console.WriteLine (/* Здесь идет комментарий! */ "Это скомпилируется");

Встроенные комментарии вроде этого нужно применять осторожно, потому что они могут ухудшить читабельность кода. Однако они удобны при отладке, скажем, когда необходимо временно попробовать запустить программу с указанным другим значением:

DoSomethingMethod (Width, /*Height*/ 100);

Символы комментария, включенные в строковый литерал, конечно же, трактуются как обычные символы:

string s = "/* Это просто нормальная строка */";

Документация XML

В дополнение к комментариям в стиле C, проиллюстрированным выше, в C# имеется очень искусное средство, на которое я хочу обратить особое внимание: способность генерировать документацию в формате XML на основе специальных комментариев. Это однострочные комментарии, начинающиеся с трех слешей (///) вместо двух. В таких комментариях можно размещать XML-дескрипторы, содержащие документацию по типам и членам типов, используемым в коде.

XML-дескрипторы, распознаваемые компилятором, перечислены в следующей таблице:

XML-дескрипторы для комментариев
Дескриптор Описание
<c> Помечает текст в строке как код
<code> Помечает множество строк как код
<example> Помечает пример кода
<exception> Документирует класс исключения (синтаксис проверяется компилятором)
<include> Включает комментарии из другого файла документации (синтаксис проверяется компилятором)
<list> Вставляет список в документацию
<param> Помечает параметр метода (синтаксис проверяется компилятором)
<paramref> Указывает, что слово является параметром метода (синтаксис проверяется компилятором)
<permission> Документирует доступ к члену (синтаксис проверяется компилятором)
<remarks> Добавляет описание члена
<returns> Документирует возвращаемое методом значение
<see> Представляет перекрестную ссылку на другой параметр (синтаксис проверяется компилятором)
<seealso> Представляет раздел "see also" ("смотреть также") в описании (синтаксис проверяется компилятором)
<summary> Представляет краткий итог о типе или члене
<value> Описывает свойство

Чтобы увидеть, как это работает, рассмотрим пример кода, в который добавим некоторые XML-комментарии:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    /// <summary>
    ///  Класс Program
    ///  основной класс программы
    ///  выводящий текст "Hello, World!"
    /// </summary>
    class Program
    {
        /// <summary>
        /// Метод Main() является
        /// входной точкой работы программы
        /// </summary>
        /// <param name="args">Аргумент метода Main()</param>
        static void Main(string[] args)
        {
            // Форматируем шапку программы
            Console.BackgroundColor = ConsoleColor.Green;
            Console.ForegroundColor = ConsoleColor.Black;
            Console.WriteLine("********************");
            Console.WriteLine("**** Мой проект ****");
            Console.WriteLine("********************");
            // Основная программа
            Console.BackgroundColor = ConsoleColor.Black;
            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine();
            Console.WriteLine("Hello, World!");

            // Ожидание нажатия клавиши Enter перед завершением работы
            Console.ReadLine();
        }
    }
}

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

     csc /t:library /doc:MyApplication.xml MyApplication.cs

Данная команда сгенерирует файл XML по имени MyApplication.xml со следующим содержимым:

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Program
    </assembly>
    <members>
        <member name="T:ConsoleApplication1.Program">
            <summary>
             Класс Program
             основной класс программы
             выводящий текст "Hello, World!"
            </summary>
        </member>
        <member name="M:ConsoleApplication1.Program.Main(System.String[])">
            <summary>
            Метод Main() является
            входной точкой работы программы
            </summary>
            <param name="args">Аргумент метода Main()</param>
        </member>
    </members>
</doc>

Обратите внимание на то, что компилятор на самом деле выполнил некоторую работу за вас: он создал элемент <assembly> и также добавил элементы <member> для каждого члена класса в этом файле. Каждый элемент <member> имеет атрибут name с полным именем члена, снабженным префиксом — буквой, который указывает на то, является он типом (Т:), полем (F:) или членом (М:).

Пройди тесты
Лучший чат для C# программистов