Climatiseur : au meilleur prix – code promo – meilleur guide – Documentation comments – C# language specification

  • AUVRAY Chaine antivol C-Code 120cm Ø8mm serrure à code integrée -
    Achetez le produit AUVRAY Chaine antivol C-Code 120cm Ø8mm serrure à code integrée au meilleur prix sur 1001pneus.fr ! ⚡ Livraison rapide et 100% gratuite* ⌚ Paiement CB en 3x ou 4x ⭐ Un service clients à votre écoute.
  • AUVRAY Chaine antivol C-Code 120cm Ø8mm serrure à code integrée -
    Achetez le produit AUVRAY Chaine antivol C-Code 120cm Ø8mm serrure à code integrée au meilleur prix sur 1001pneus.fr ! ⚡ Livraison rapide et 100% gratuite* ⌚ Paiement CB en 3x ou 4x ⭐ Un service clients à votre écoute.
  • Vanessa Mielzareck Le Guide De La Personne Heureuse : Comment Créer Et Attirer Le Meilleur Dans Sa Vie ?
    Binding : Taschenbuch, Edition : 3 edition, Label : COURRIER DU LIVRE, Publisher : COURRIER DU LIVRE, medium : Taschenbuch, numberOfPages : 325, publicationDate : 2015-06-08, authors : Vanessa Mielzareck, languages : french, ISBN : 2702911412
?>
  • Trotec Climatiseur mobile local PAC 2010 SH avec fonction de chauffage
    Climatiseur local PAC 2010 SH avec fonction de chauffageClimatiseur 4 en 1 : assure un climat ambiant agréable par tous les temps grâce au refroidissement, au chauffage, à la ventilation et à la déshumidification
  • Climatiseur mobile avec evacuation - Klarstein - 14000 BTU - Fonction ventilateur & déshumidificateur - Refroidisseur d'air - Blanc
    Les températures idéales ne sont pas dues au hasard ! Le climatiseur Klarstein Grandbreeze Pro 14K lutte contre la chaleur estivale et produit une température intérieure confortable pour votre bien-être. Au bureau comme à la maison : fraîcheur garantie avec le Grandbreeze Pro. Plus de puissance pour un climat de rêve : avec sa capacité de climatisation de 14000 BTU / 1,65 kW sous le capot, le climatiseur Klarstein Grandbreeze Pro 14K génère des températures agréables entre 18 et 32 ??°C dans vos espaces de vie et de travail. Le climatiseur mobile alimente des pièces jusqu'à 68 m² avec un débit d'air jusqu'à 460 m³/h. Performance ne rime pas nécessairement avec coût élevé : il est si économique qu'il a obtenu la classe d'efficacité énergétique A. Un ventilateur à 3 vitesses réglables distribue l'air refroidi sous forme d'un souffle doux ou d'une brise puissante dans la pièce. Et si vous souhaitez simplement faire circuler l'air, faites simplement fonctionner le ventilateur seul et économisez encore plus d'électricité. De plus, la fonction de déshumidification intégrée du Grandbreeze Pro 14K vous libère de l'air chaud et humide de votre maison et vous permet de mieux respirer lors des chaudes journées d'été. Sa minuterie programmable démarre ou arrête le climatiseur après la durée réglée, tandis que le mode veille réduit lentement la climatisation. Toutes les fonctions du climatiseur Klarstein Grandbreeze Pro 14K sont réglables sur le panneau de commande clair de l'appareil et par télécommande. Avec ses lignes claires et son boîtier élégant, le climatiseur Klarstein Grandbreeze Pro 14K s'intègre parfaitement dans n'importe quel style d'intérieur ou de bureau et occupe sa place à la fenêtre avec confiance et discrétion. Bien entendu, toutes les pièces nécessaires au raccordement du climatiseur sont fournies, telles que le tuyau d'évacuation et le joint de fenêtre. Le climatiseur se déplace très facilement grâce aux roulettes silencieuses intégrées. L'été peut venir ! Avec le climatiseur Klarstein Grandbreeze Pro 14K, gardez la tête froide en toutes circonstances et offrez une fraîcheur bienvenue et une bouffée d'air frais à vos pièces surchauffées. Top Features: ¿ Puissant : capacité de climatisation de 14000 BTU / 1,65 kW et débit d'air de 460 m³/h ¿ Efficace : pour climatiser les pièces de 42-68 m² ¿ 3-en-1: climatiseur avec les modes climatisation, déshumidification et ventilation ¿ Inclus : flexible d'évacuation et joint de fenêtre pour fenêtres à guillotine et coulissantes ¿ Utilisation simple : par panneau de commande LED intuitif ou télécommande ¿ Economie d'énergie : classe d'efficacité énergétique A et réfrigérant écologique ¿ Très mobile : avec 4 roulettes et poignées pratiques ¿ Silencieux : faible niveau sonore de 55 dB seulement Caractéristiques: ¿ Kit d'étanchéité de fenêtre fourni ¿ Bouton de marche/arrêt sur le haut de l'appareil ¿ Capacité de climatisation : 14000 BTU / 1,65 kW ¿ Taille de pièce recommandée : 42 à 68 m² ¿ Niveau...
  • Climatiseur Mobile P228 Qlima - Classe A - Volume Air 300m3/h - 2,8 Kw Qlima
    Climatiseur Qlima ,2,8KW de puissance,gaz R290,classe A,Volume air 300M3/H,deshumidification 40,8L/H,garantie 2 ans.
  • Sovelor climatiseur mobile silencieux
    Découvrez le climatiseur mobile PAC 2100 X, une solution rafraîchissante pour votre espace, alliant efficacité et style. Sa conception compacte et attrayante s'intègre parfaitement dans n'importe quel environnement, tandis que son fonctionnement silencieux assure un véritable confort, même à un d...
  • QLIMA P622 Climatiseur mobile 2200 watts - 7500 Btu - Programmable - Silencieux
    Climatiseur mobile P622 - Arret automatique - Sauvegarde de la programmation en cas de coupure électrique - Ventilation orientable - Climatisation / Déshumidification
  • Sichler Climatiseur mobile 2600 W / 9000 BTU/h
    Avec 2 puissances de ventilation et une température programmable, ce climatiseur vous garantit une température agréable et confortable tout au long de la journée. Profitez d’une brise fraîche chez vous ou au bure...
  • Cecotec Climatiseur mobile portable silencieux ForceClima 7500 Soundless Connected
    Climatiseur portable doté d'une grande capacité de refroidissement de 7000 BTU. Cette capacité permet d'atteindre rapidement et efficacement la température souhaitée dans votre pièce d'environ 15 m2. Technologie Soundless. Système qui permet un fonctionnement plus silencieux et qui réduit également les éventuelles vibrations pour un plus grand confort. L'appareil peut être configuré à distance via une connexion Wi-Fi, ce qui vous permet de contrôler entièrement l'appareil sur votre smartphone, où que vous soyez. Il est doté d'une télécommande qui permet de contrôler le climatiseur de n'importe où, sans avoir à s'en approcher pour en modifier les réglages. Son panneau de commande tactile supérieur vous permet de contrôler le fonctionnement du climatiseur de manière pratique et facile. L'écran LED affiche tous les réglages possibles et met en évidence les réglages en cours pour faciliter le contrôle du climatiseur. Le climatiseur dispose de 4 modes de fonctionnement : le mode Ventilation, le mode Refroidissement, le mode Déshumidification et le mode Nuit. Les deux vitesses du climatiseur permettent d'adapter son fonctionnement en fonction des besoins à tout moment, vitesse basse ou Low et vitesse haute ou High. Son mode Déshumidification est capable de capter jusqu'à un maximum de 20 litres par jour, ce qui permet d'obtenir un environnement plus sain dans votre maison. La minuterie peut être réglée sur un maximum de 24 heures pour sélectionner le temps de fonctionnement souhaité, après quoi le climatiseur s'éteint automatiquement. Le climatiseur utilise le gaz R-290, qui est respectueux de l'environnement et peu polluant. Sa puissance élevée de 792 W permet au climatiseur de couvrir des surfaces allant jusqu'à 15 m2 et d'atteindre la température souhaitée en peu de temps. Le climatiseur est équipé d'un tuyau d'évacuation de l'eau qui permet de le faire fonctionner en permanence. Le filtre à air est capable d'arrêter les plus grosses particules présentes dans l'air et d'obtenir ainsi une meilleure qualité de l'air. Ses roues multidirectionnelles à 360° et ses poignées permettent de déplacer le climatiseur d'une pièce à l'autre facilement, confortablement et avec peu d'efforts. Kit d'installation sur la fenêtre inclus. Composition Climatisation portable Télécommande Kit d'installation de fenêtre Manuel d'utilisation
  • Cecotec Climatiseur mobile portable silencieux ForceClima 9500 Soundless Heating Connected
    Climatiseur portable avec une grande capacité de refroidissement de 9000 BTU. Cette capacité permet d'atteindre facilement et rapidement la température souhaitée dans la pièce. Technologie silencieuse. Système qui offre un fonctionnement plus silencieux et réduit également les vibrations possibles pour créer un plus grand confort. La pompe à chaleur de climatisation peut également être utilisée en hiver afin d'augmenter la température de la pièce dans laquelle elle se trouve. L'appareil peut être configuré à distance via une connexion Wi-Fi, vous aurez donc le contrôle total de l'appareil sur votre smartphone de n'importe où. Il dispose d'une télécommande pour contrôler confortablement le climatiseur de n'importe où sans avoir à s'en approcher pour modifier les paramètres sélectionnés. Sa grande surface de couverture de 20 m2 permet d'adapter et de modifier la température de la pièce aux degrés souhaités, soit pour réduire les degrés en été, soit les augmenter en hiver. L'écran LED affiche tous les réglages possibles et met en évidence ceux actuellement utilisés pour un contrôle facile du climatiseur. Le climatiseur dispose de 5 modes de fonctionnement : mode ventilateur, mode refroidissement, mode chauffage, mode déshumidification et mode nuit. Les 2 vitesses de la climatisation vous permettent d'adapter son fonctionnement en fonction du besoin à tout moment, de bas en haut. Son mode de déshumidification est capable de capturer jusqu'à un maximum de 24 litres par jour, ce qui permettra d'obtenir un environnement plus sain dans votre maison. La minuterie peut être programmée pour un maximum de 24 heures pour sélectionner le temps de fonctionnement souhaité, une fois terminé, il s'éteindra automatiquement. La climatisation a une fonction d'oscillation pour faciliter la sortie d'air dans toutes les directions et ainsi améliorer la climatisation de la pièce. Il dispose de 3 systèmes de sécurité. Sécurité antigel (si la température s'approche de 0°, il s'éteint), sécurité anti-débordement (lorsque le réservoir est plein, un voyant rouge "réservoir plein" s'éteint et clignote) et sécurité du compresseur qui prolonge sa durée de vie (cela prend 3 minutes s'éteindre évitant ainsi un arrêt brutal qui le force excessivement). Son classement énergétique A assure une consommation modérée d'électricité grâce à son excellent fonctionnement à la fois efficace et efficient. La climatisation utilise du gaz R-290, respectueux de l'environnement et peu polluant. Sa grande puissance de 1010 W permet au climatiseur de couvrir des surfaces de 20 m2 et d'atteindre la température souhaitée en peu de temps. Le climatiseur a un tube de drainage de l'eau pour le faire fonctionner à tout moment. Le filtre à air est capable d'arrêter les plus grosses particules dans l'air et d'en obtenir ainsi une meilleure qualité. Ses roues multidirectionnelles à 360° et ses poignées vous permettent de déplacer la climatisation d'une pièce à l'autre de manière simple, confortable et sans...
  • Climatiseur mobile Vortice KRYO POLAR EVO 11000BTU Gaz R290 65001
    Climatiseur Porteur Vortex KRYO-POLAR EVO 11000BTU avec Gaz R290, 4 modes de fonctionnement : automatique, refroidissement, déshumidification, ventilation. Fiche techinique
  • Climatiseur mobile simple Hisense - 2kW - 36m2 - 63dB - Blanc
    Climatiseur mobile simple Hisense - 2kW - R290 - Blanc Hisense, l'un des plus grands fabricants d'électroménager propose ce climatiseur mobile simple de 2000W. Puissance : 2kW Jusqu'à 36m² Puissance sonore max : 64dB Mobile Gaz réfrigérant : R290
  • Climatiseur mobile compact HBM - 7 000 BTU/h
    Découvrez le puissant climatiseur mobile compact HBM, un complément précieux pour les pièces qui se réchauffent rapidement. Grâce à sa conception compacte, ce climatiseur mobile est très silencieux, de sorte qu'il ne vous dérangera même pas la nuit. Le climatiseur est livré avec une télécommande pour plus de commodité. Ce climatiseur mobile associe un faible niveau sonore à un débit d'air puissant, ce qui vous permet de rafraîchir rapidement une pièce de 27 m² pour atteindre une température agréable. Le design compact permet de déplacer facilement le climatiseur et le tube flexible à l'arrière assure une dissipation efficace de la chaleur. Le climatiseur mobile compact HBM offre plusieurs options de luxe, telles que le réglage numérique de la température, une sécurité enfant, des roulettes pivotantes pour un déplacement aisé, une option de déshumidification, une minuterie de mise en veille et un système d'évacuation de la condensation. Grâce à la télécommande infrarouge fournie, vous pouvez contrôler toutes les fonctions confortablement depuis votre fauteuil ou votre lit. Grâce à ce climatiseur mobile léger, il est à nouveau possible de dormir et de travailler à la maison à une température confortable. Une solution pratique et agréable pour les journées chaudes !
  • Climatiseur mobile compact HBM - 9 000 BTU/h
    Le climatiseur mobile compact HBM est la solution pour maintenir les espaces de travail et les entrepôts confortables pendant les journées chaudes. Avec une capacité de refroidissement de 9 000 BTU/h, ce puissant climatiseur peut refroidir sans effort une pièce de 30m2 rapidement jusqu'à une température confortable. Grâce à la technologie de la pompe à chaleur, l'air chaud est aspiré, refroidi puis expulsé, déplaçant ainsi plus de chaleur qu'il n'en coûte. Cela permet de maintenir la consommation d'énergie à un niveau bas et de ne pas gaspiller une chaleur précieuse. Le faible niveau sonore vous permet d'utiliser le climatiseur même dans votre chambre à coucher, sans nuisance sonore. Le tube flexible situé à l'arrière du climatiseur peut facilement être fixé à une fenêtre ou à un mur à l'aide des profilés et de la buse fournis, empêchant ainsi l'air chaud de circuler à l'intérieur et l'air refroidi de disparaître à l'extérieur. L'affichage LED facilite le réglage de la température, tandis que la sécurité enfant empêche toute utilisation non souhaitée. Grâce à ses roulettes légères, le climatiseur est facile à déplacer. La télécommande infrarouge permet de contrôler toutes les fonctions, y compris la minuterie de mise en veille pour une nuit de fraîcheur.
  • Climatiseur Mobile Split Déconnectable - Technibel Scdf32
    Découvrez le climatiseur mobile Split déconnectable, un savoir-faire signé Technibel ! Climatisation d'appoint au design discret . Possibilité d'avoir une installation mobile ou fixe . Télécommande infrarouge : pour une utilisation simple et conviviale. Climatisation mobile efficace Technibel. 3 mo
  • Trotec Climatiseur mobile local PAC 3500 SH + AirLock 100
    Le PAC 3500 SH est un climatiseur mobile réversible de classe énergétique A à fonctions de ventilation et déshumidification. Sa capacité frigorifique s'élève à 3,5 kW/12.000 Btu, tandis que sa puissance calorifique est de 2,9 kW. En set avec kit de calfeutrage pour la gaine d'évacuation.
  • Trotec Climatiseur mobile monobloc PAC 3500
    Climatiseur monobloc pour pièces de 115 m³ max. À raison d'une consommation d'énergie de classe A et d'une puissance frigorifique élevée de 3,5 kW, il se distingue également en matière de rentabilité et crée un ilôt de fraîcheur à la demande.
  • Trotec Climatiseur mobile local PAC 3500 SH avec fonction de chauffage
    Le PAC 3500 SH est un climatiseur mobile 4 en 1 de classe énergétique A à fonctions de refroidissement, chauffage, ventilation et déshumidification pour 46 m²/115 m³ max. Sa capacité frigorifique s'élève à 3,5 kW/12.000 Btu, tandis que sa puissance calorifique est de 2,9 kW.
  • Trotec Climatiseur mobile local PAC 3500 SH + AirLock 1000
    Le PAC 3500 SH est un climatiseur mobile réversible de classe énergétique A à fonctions de ventilation et déshumidification. Sa capacité frigorifique s'élève à 3,5 kW/12.000 Btu, tandis que sa puissance calorifique est de 2,9 kW. En set avec kit de calfeutrage pour gaine d'évacuation.
  • Trotec Climatiseur mobile local design PAC 3810 S + AirLock 100
    Climatiseur de 3,8 kW/13.000 Btu pour 50 m²/125 m³ max. en set avec kit de calfeutrage AirLock 100.
  • Trotec Climatiseur mobile local design PAC 3810 S
    Climatiseur mobile monobloc de 3,8 kW/13.000 Btu pour pièces de 50 m²/125 m³ max.
  • Trotec Climatiseur mobile local design PAC 3810 S + AirLock 1000
    Climatiseur de 3,8 kW/13.000 Btu pour 50 m²/125 m³ max. en set avec kit de calfeutrage.
  • Trotec Climatiseur mobile PAC 3501 S avec WiFi
    Climatiseur mobile PAC 3501 S3 en 1 : climatisation, ventilation et déshumidification en un seul appareil
  • Rowenta TURBO ECO SENSE+ Climatiseur mobile compact, Puissant, Performance énergétique AU5620F0
    Climatiseur portable ultra-puissant avec une capacité de refroidissement de 3 500 W* (13 000 BtU)** <br /><br />Idéal pour les grandes pièces allant jusqu'à  120 m³ grâce à  son panneau de sortie d'air orientable de 15° à  70° <br /><br />Performance énergétique de classe A et fonction Eco pour une consommation d'énergie modérée <br /><br />Format compact et facile à  déplacer grâce à  deux poignées latérales et quatre roulettes intégrées<br /><br />Un rafraîchissement discret lorsque vous travaillez, dormez ou regardez la télévision, avec seulement 63,5 dB(A) en vitesse minimale <br /><br />Technologie 3-en-1 polyvalente alliant un climatiseur, un déshumidificateur et un ventilateur dans un seul et même appareil.<br /><br /> Le tout dans un design épuré avec une finition imitation bois unique !<br /><br />
  • Climatiseur Mobile Split Déconnectable - Technibel Scdf32
    Découvrez le climatiseur mobile Split déconnectable, un savoir-faire signé Technibel ! Climatisation d'appoint au design discret . Possibilité d'avoir une installation mobile ou fixe . Télécommande infrarouge : pour une utilisation simple et conviviale. Climatisation mobile efficace Technibel. 3 modes sont disponibles : mode froid, déshumidification et ventilation . Un faible impact environnemental grâce au tout nouveau f luide frigorigène R32 . Système automatique d’évacuation des condensats. Un raccord déconnectable AEROQUIP. Equipé d'un compresseur inverter. Une nouveauté signée Technibel pour un confort inégalé ! Liaison frigorifique d'origine mesure 2mètres, longueur utile 1m50.
  • Climatiseur mobile 3 en 1- silencieux et compact - avec télécommande - bestron aac7000
    Climatiseur mobile 3 en 1 Climatiseur mobile 3 en 1 de la marque Bestron avec fonction climatiseur, ventilateur et déshumidificateur 3 en 1.  Capacité de refroidissement de 7000 BTU / 2.1 kW / 60 m3. Tuyau d'évacuation de 1.5m et kit d'évacuation par la fenêtre   Commande facile et simple par un panneau ou télécommande (fournie)

This annex is informative.

D.1 General

C# provides a mechanism for programmers to document their code using a comment syntax that contains XML text. In source code files, comments having a certain form can be used to direct a tool to produce XML from those comments and the source code elements, which they precede. Comments using such syntax are called documentation comments. They must immediately precede a user-defined type (such as a class, delegate, or interface) or a member (such as a field, event, property, or method). The XML generation tool is called the documentation generator. (This generator could be, but need not be, the C# compiler itself.) The output produced by the documentation generator is called the documentation file. A documentation file is used as input to a documentation viewer; a tool intended to produce some sort of visual display of type information and its associated documentation.

A conforming C# compiler is not required to check the syntax of documentation comments; such comments are simply ordinary comments. A conforming compiler is permitted to do such checking, however.

This specification suggests a set of standard tags to be used in documentation comments, but use of these tags is not required, and other tags may be used if desired, as long as the rules of well-formed XML are followed. For C# implementations targeting the CLI, it also provides information about the documentation generator and the format of the documentation file. No information is provided about the documentation viewer.

D.2 Introduction

Comments having a certain form can be used to direct a tool to produce XML from those comments and the source code elements that they precede. Such comments are Single-Line_Comments (§6.3.3) that start with three slashes (///), or Delimited_Comments (§6.3.3) that start with a slash and two asterisks (/**). They must immediately precede a user-defined type or a member that they annotate. Attribute sections (§21.3) are considered part of declarations, so documentation comments must precede attributes applied to a type or member.

For expository purposes, the format of document comments is shown below as two grammar rules: Single_Line_Doc_Comment and Delimited_Doc_Comment. However, these rules are not part of the C# grammar, but rather, they represent particular formats of Single_Line_Comment and Delimited_Comment lexer rules, respectively.

Syntax:

Single_Line_Doc_Comment
    : '///' Input_Character*
    ;
   
Delimited_Doc_Comment
    : '/**' Delimited_Comment_Section* ASTERISK+ '/'
    ;

In a Single_Line_Doc_Comment, if there is a Whitespace character following the /// characters on each of the Single_Line_Doc_Comments adjacent to the current Single_Line_Doc_Comment, then that Whitespace character is not included in the XML output.

In a Delimited_Doc_Comment, if the first non-Whitespace character on the second line is an ASTERISK and the same pattern of optional Whitespace characters and an ASTERISK character is repeated at the beginning of each of the lines within the Delimited_Doc_Comment, then the characters of the repeated pattern are not included in the XML output. The pattern can include Whitespace characters after, as well as before, the ASTERISK character.

Example:

/// <summary>
/// Class <c>Point</c> models a point in a two-dimensional plane.
/// </summary>
public class Point

    /// <summary>
    /// Method <c>Draw</c> renders the point.
    /// </summary>
    void Draw() ...

The text within documentation comments must be well formed according to the rules of XML (http://www.w3.org/TR/REC-xml). If the XML is ill formed, a warning is generated and the documentation file will contain a comment saying that an error was encountered.

Although developers are free to create their own set of tags, a recommended set is defined in §D.3. Some of the recommended tags have special meanings:

  • The <param> tag is used to describe parameters. If such a tag is used, the documentation generator must verify that the specified parameter exists and that all parameters are described in documentation comments. If such verification fails, the documentation generator issues a warning.

  • The cref attribute can be attached to any tag to provide a reference to a code element. The documentation generator must verify that this code element exists. If the verification fails, the documentation generator issues a warning. When looking for a name described in a cref attribute, the documentation generator must respect namespace visibility according to using statements appearing within the source code. For code elements that are generic, the normal generic syntax (e.g., “List<T>”) cannot be used because it produces invalid XML. Braces can be used instead of brackets (e.g.; “ListT”), or the XML escape syntax can be used (e.g., “List&lt;T&gt;”).

  • The <summary> tag is intended to be used by a documentation viewer to display additional information about a type or member.

  • The <include> tag includes information from an external XML file.

Note carefully that the documentation file does not provide full information about the type and members (for example, it does not contain any type information). To get such information about a type or member, the documentation file must be used in conjunction with reflection on the type or member.

D.3.1 General

The documentation generator must accept and process any tag that is valid according to the rules of XML. The following tags provide commonly used functionality in user documentation. (Of course, other tags are possible.)

TagReferencePurpose
<c>§D.3.2Set text in a code-like font
<code>§D.3.3Set one or more lines of source code or program output
<example>§D.3.4Indicate an example
<exception>§D.3.5Identifies the exceptions a method can throw
<include>§D.3.6Includes XML from an external file
<list>§D.3.7Create a list or table
<para>§D.3.8Permit structure to be added to text
<param>§D.3.9Describe a parameter for a method or constructor
<paramref>§D.3.10Identify that a word is a parameter name
<permission>§D.3.11Document the security accessibility of a member
<remarks>§D.3.12Describe additional information about a type
<returns>§D.3.13Describe the return value of a method
<see>§D.3.14Specify a link
<seealso>§D.3.15Generate a See Also entry
<summary>§D.3.16Describe a type or a member of a type
<typeparam>§D.3.17Describe a type parameter for a generic type or method
<typeparamref>§D.3.18Identify that a word is a type parameter name
<value>§D.3.19Describe a property

D.3.2 <c>

This tag provides a mechanism to indicate that a fragment of text within a description should be set in a special font such as that used for a block of code. For lines of actual code, use <code> (§D.3.3).

Syntax:

<c>text</c>

Example:

/// <summary>
/// Class <c>Point</c> models a point in a two-dimensional plane.
/// </summary>
public class Point


D.3.3 <code>

This tag is used to set one or more lines of source code or program output in some special font. For small code fragments in narrative, use <c> (§D.3.2).

Syntax:

<code>source code or program output</code>

Example:

public class Point

    /// <summary>
    /// This method changes the point's location by the given x- and y-offsets.
    /// <example>
    /// For example:
    /// <code>
    /// Point p = new Point(3,5);
    /// p.Translate(-1,3);
    /// </code>
    /// results in <c>p</c>'s having the value (2,8).
    /// </example>
    /// </summary>
    public void Translate(int dx, int dy)
    
        ...
    

D.3.4 <example>

This tag allows example code within a comment, to specify how a method or other library member might be used. Ordinarily, this would also involve use of the tag <code> (§D.3.3) as well.

Syntax:

<example>description</example>

Example:

See <code> (§D.3.3) for an example.

D.3.5 <exception>

This tag provides a way to document the exceptions a method can throw.

Syntax:

<exception cref="member">description</exception>

where

  • cref="member" is the name of a member. The documentation generator checks that the given member exists and translates member to the canonical element name in the documentation file.
  • description is a description of the circumstances in which the exception is thrown.

Example:

class MasterFileFormatCorruptException : System.Exception  ... 
class MasterFileLockedOpenException : System.Exception  ... 

public class DataBaseOperations

    /// <exception cref="MasterFileFormatCorruptException">
    /// Thrown when the master file is corrupted.
    /// </exception>
    /// <exception cref="MasterFileLockedOpenException">
    /// Thrown when the master file is already open.
    /// </exception>
    public static void ReadRecord(int flag)
    
        if (flag == 1)
        
            throw new MasterFileFormatCorruptException();
        
        else if (flag == 2)
        
            throw new MasterFileLockedOpenException();
        
        ...
    

D.3.6 <include>

This tag allows including information from an XML document that is external to the source code file. The external file must be a well-formed XML document, and an XPath expression is applied to that document to specify what XML from that document to include. The <include> tag is then replaced with the selected XML from the external document.

Syntax:

<include file="filename" path="xpath" />

where

  • file="filename" is the file name of an external XML file. The file name is interpreted relative to the file that contains the include tag.
  • path="xpath" is an XPath expression that selects some of the XML in the external XML file.

Example:

If the source code contained a declaration like:

/// <include file="docs.xml" path="extradoc/class[@name="IntList"]/*" />
public class IntList  ... 

and the external file “docs.xml” had the following contents:

<?xml version="1.0"?>
<extradoc>
    <class name="IntList">
        <summary>
            Contains a list of integers.
        </summary>
    </class>
    <class name="StringList">
        <summary>
            Contains a list of strings.
        </summary>
    </class>
</extradoc>

then the same documentation is output as if the source code contained:

/// <summary>
/// Contains a list of integers.
/// </summary>
public class IntList  ... 

D.3.7 <list>

This tag is used to create a list or table of items. It can contain a <listheader> block to define the heading row of either a table or definition list. (When defining a table, only an entry for term in the heading need be supplied.)

Each item in the list is specified with an <item> block. When creating a definition list, both term and description must be specified. However, for a table, bulleted list, or numbered list, only description need be specified.

Syntax:

<list type="bullet" | "number" | "table">
    <listheader>
        <term>term</term>
        <description>description</description>
    </listheader>
    <item>
        <term>term</term>
        <description>description</description>
    </item>
    ...
    <item>
        <term>term</term>
        <description>description</description>
    </item>
</list>

where

  • term is the term to define, whose definition is in description.
  • description is either an item in a bullet or numbered list, or the definition of a term.

Example:

public class MyClass

    /// <summary>Here is an example of a bulleted list:
    /// <list type="bullet">
    /// <item>
    /// <description>Item 1.</description>
    /// </item>
    /// <item>
    /// <description>Item 2.</description>
    /// </item>
    /// </list>
    /// </summary>
    public static void Main()
    
        ...
    

D.3.8 <para>

This tag is for use inside other tags, such as <summary> (§D.3.16) or <returns> (§D.3.13), and permits structure to be added to text.

Syntax:

<para>content</para>

where

  • content is the text of the paragraph.

Example:

public class Point

    /// <summary>This is the entry point of the Point class testing program.
    /// <para>
    /// This program tests each method and operator, and
    /// is intended to be run after any non-trivial maintenance has
    /// been performed on the Point class.
    /// </para>
    /// </summary>
    public static void Main() 
    
        ...
    

D.3.9 <param>

This tag is used to describe a parameter for a method, constructor, or indexer.

Syntax:

<param name="name">description</param>

where

  • name is the name of the parameter.
  • description is a description of the parameter.

Example:

public class Point

    /// <summary>
    /// This method changes the point's location to
    /// the given coordinates.
    /// </summary>
    /// <param name="xPosition">the new x-coordinate.</param>
    /// <param name="yPosition">the new y-coordinate.</param>
    public void Move(int xPosition, int yPosition)
    
        ...
    

D.3.10 <paramref>

This tag is used to indicate that a word is a parameter. The documentation file can be processed to format this parameter in some distinct way.

Syntax:

<paramref name="name"/>

where

  • name is the name of the parameter.

Example:

public class Point

    /// <summary>This constructor initializes the new Point to
    /// (<paramref name="xPosition"/>,<paramref name="yPosition"/>).
    /// </summary>
    /// <param name="xPosition">the new Point's x-coordinate.</param>
    /// <param name="yPosition">the new Point's y-coordinate.</param>
    public Point(int xPosition, int yPosition)
    
        ...
    

D.3.11 <permission>

This tag allows the security accessibility of a member to be documented.

Syntax:

<permission cref="member">description</permission>

where

  • member is the name of a member. The documentation generator checks that the given code element exists and translates member to the canonical element name in the documentation file.
  • description is a description of the access to the member.

Example:

public class MyClass

    /// <permission cref="System.Security.PermissionSet">
    /// Everyone can access this method.
    /// </permission>
    public static void Test()
    
        ...
    

D.3.12 <remarks>

This tag is used to specify extra information about a type. Use <summary> (§D.3.16) to describe the type itself and the members of a type.

Syntax:

<remarks>description</remarks>

where

  • description is the text of the remark.

Example:

/// <summary>
/// Class <c>Point</c> models a point in a two-dimensional plane.
/// </summary>
/// <remarks>
/// Uses polar coordinates
/// </remarks>
public class Point

    ...

D.3.13 <returns>

This tag is used to describe the return value of a method.

Syntax:

<returns>description</returns>

where

  • description is a description of the return value.

Example:

public class Point

    /// <summary>
    /// Report a point's location as a string.
    /// </summary>
    /// <returns>
    /// A string representing a point's location, in the form (x,y),
    /// without any leading, trailing, or embedded whitespace.
    /// </returns>
    public override string ToString() => $"(X,Y)";
    public int X  get; set; 
    public int Y  get; set; 

D.3.14 <see>

This tag allows a link to be specified within text. Use <seealso> (§D.3.15) to indicate text that is to appear in a See Also subclause.

Syntax:

<see cref="member" href="url" langword="keyword" />

where

  • member is the name of a member. The documentation generator checks that the given code element exists and changes member to the element name in the generated documentation file.
  • url is a reference to an external source.
  • langword is a word to be highlighted somehow.

Example:

public class Point

    /// <summary>
    /// This method changes the point's location to
    /// the given coordinates. <see cref="Translate"/>
    /// </summary>
    public void Move(int xPosition, int yPosition)
    
        ...
    
    /// <summary>This method changes the point's location by
    /// the given x- and y-offsets. <see cref="Move"/>
    /// </summary>
    public void Translate(int dx, int dy)
    
        ...
    

D.3.15 <seealso>

This tag allows an entry to be generated for the See Also subclause. Use <see> (§D.3.14) to specify a link from within text.

Syntax:

<seealso cref="member" href="url" />

where

  • member is the name of a member. The documentation generator checks that the given code element exists and changes member to the element name in the generated documentation file.
  • url is a reference to an external source.

Example:

public class Point

    /// <summary>
    /// This method determines whether two Points have the same location.
    /// </summary>
    /// <seealso cref="operator=="/>
    /// <seealso cref="operator!="/>
    public override bool Equals(object o)
    
        ...
    

D.3.16 <summary>

This tag can be used to describe a type or a member of a type. Use <remarks> (§D.3.12) to describe the type itself.

Syntax:

<summary>description</summary>

where

  • description is a summary of the type or member.

Example:

public class Point


    /// <summary>
    /// This constructor initializes the new Point to
    /// (<paramref name="xPosition"/>,<paramref name="yPosition"/>).
    /// </summary>
    public Point(int xPosition, int yPosition) 
    
        ...
    

    /// <summary>This constructor initializes the new Point to (0,0).</summary>
    public Point() : this(0, 0)
    
    

D.3.17 <typeparam>

This tag is used to describe a type parameter for a generic type or method.

Syntax:

<typeparam name="name">description</typeparam>

where

  • name is the name of the type parameter.
  • description is a description of the type parameter.

Example:

/// <summary>A generic list class.</summary>
/// <typeparam name="T">The type stored by the list.</typeparam>
public class MyList<T>

   ...

D.3.18 <typeparamref>

This tag is used to indicate that a word is a type parameter. The documentation file can be processed to format this type parameter in some distinct way.

Syntax:

<typeparamref name="name"/>

where

  • name is the name of the type parameter.

Example:

public class MyClass

    /// <summary>
    /// This method fetches data and returns a list of
    /// <typeparamref name="T"/>.
    /// </summary>
    /// <param name="string">query to execute</param>
    public List<T> FetchData<T>(string query)
    
        ...
    

D.3.19 <value>

This tag allows a property to be described.

Syntax:

<value>property description</value>

where

  • property description is a description for the property.

Example:

public class Point

    /// <value>Property <c>X</c> represents the point's x-coordinate.</value>
    public int X  get; set; 

D.4 Processing the documentation file

D.4.1 General

The following information is intended for C# implementations targeting the CLI.

The documentation generator generates an ID string for each element in the source code that is tagged with a documentation comment. This ID string uniquely identifies a source element. A documentation viewer can use an ID string to identify the corresponding item to which the documentation applies.

The documentation file is not a hierarchical representation of the source code; rather, it is a flat list with a generated ID string for each element.

D.4.2 ID string format

The documentation generator observes the following rules when it generates the ID strings:

  • No white space is placed in the string.

  • The first part of the string identifies the kind of member being documented, via a single character followed by a colon. The following kinds of members are defined:

    CharacterDescription
    EEvent
    FField
    MMethod (including constructors, finalizers, and operators)
    NNamespace
    PProperty (including indexers)
    TType (such as class, delegate, enum, interface, and struct)
    !Error string; the rest of the string provides information about the error. For example, the documentation generator generates error information for links that cannot be resolved.
  • The second part of the string is the fully qualified name of the element, starting at the root of the namespace. The name of the element, its enclosing type(s), and namespace are separated by periods. If the name of the item itself has periods, they are replaced by # (U+0023) characters. (It is assumed that no element has this character in its name.)

  • For methods and properties with arguments, the argument list follows, enclosed in parentheses. For those without arguments, the parentheses are omitted. The arguments are separated by commas. The encoding of each argument is the same as a CLI signature, as follows:

    • Arguments are represented by their documentation name, which is based on their fully qualified name, modified as follows:
      • Arguments that represent generic types have an appended “'” character followed by the number of type parameters
      • Arguments having the out or ref modifier have an @ following their type name. Arguments passed by value or via params have no special notation.
      • Arguments that are arrays are represented as [ lowerbound : size ,, lowerbound : size ] where the number of commas is the rank less one, and the lower bounds and size of each dimension, if known, are represented in decimal. If a lower bound or size is not specified, it is omitted. If the lower bound and size for a particular dimension are omitted, the “:” is omitted as well. Jagged arrays are represented by one “[]” per level.
      • Arguments that have pointer types other than void are represented using a * following the type name. A void pointer is represented using a type name of System.Void.
      • Arguments that refer to generic type parameters defined on types are encoded using the “`” character followed by the zero-based index of the type parameter.
      • Arguments that use generic type parameters defined in methods use a double-backtick “``” instead of the “`” used for types.
      • Arguments that refer to constructed generic types are encoded using the generic type, followed by “”, followed by a comma-separated list of type arguments, followed by “”.

D.4.3 ID string examples

The following examples each show a fragment of C# code, along with the ID string produced from each source element capable of having a documentation comment:

Types are represented using their fully qualified name, augmented with generic information:

enum Color  Red, Blue, Green 

namespace Acme

    interface IProcess  ... 

    struct ValueType  ... 

    class Widget : IProcess
    
        public class NestedClass  ... 
        public interface IMenuItem  ... 
        public delegate void Del(int i);
        public enum Direction  North, South, East, West 
    

    class MyList<T>
    
        class Helper<U,V>  ... 
    

IDs:

"T:Color"
"T:Acme.IProcess"
"T:Acme.ValueType"
"T:Acme.Widget"
"T:Acme.Widget.NestedClass"
"T:Acme.Widget.IMenuItem"
"T:Acme.Widget.Del"
"T:Acme.Widget.Direction"
"T:Acme.MyList`1"
"T:Acme.MyList`1.Helper`2"

Fields are represented by their fully qualified name.

namespace Acme

    struct ValueType
    
        private int total;
    

    class Widget : IProcess
    
        public class NestedClass
        
            private int value;
        

        private string message;
        private static Color defaultColor;
        private const double PI = 3.14159;
        protected readonly double monthlyAverage;
        private long[] array1;
        private Widget[,] array2;
        private unsafe int *pCount;
        private unsafe float **ppValues;
    

IDs:

"F:Acme.ValueType.total"
"F:Acme.Widget.NestedClass.value"
"F:Acme.Widget.message"
"F:Acme.Widget.defaultColor"
"F:Acme.Widget.PI"
"F:Acme.Widget.monthlyAverage"
"F:Acme.Widget.array1"
"F:Acme.Widget.array2"
"F:Acme.Widget.pCount"
"F:Acme.Widget.ppValues"

Constructors

namespace Acme

    class Widget : IProcess
    
        static Widget()  ... 
        public Widget()  ... 
        public Widget(string s)  ... 
    

IDs:

"M:Acme.Widget.#cctor"
"M:Acme.Widget.#ctor"
"M:Acme.Widget.#ctor(System.String)"

Finalizers

namespace Acme

    class Widget : IProcess
    
        ~Widget()  ... 
    

IDs:

"M:Acme.Widget.Finalize"

Methods

namespace Acme

    struct ValueType
    
        public void M(int i)  ... 
    

    class Widget : IProcess
    
        public class NestedClass
        
            public void M(int i)  ... 
        

        public static void M0()  ... 
        public void M1(char c, out float f, ref ValueType v)  ... 
        public void M2(short[] x1, int[,] x2, long[][] x3)  ... 
        public void M3(long[][] x3, Widget[][,,] x4)  ... 
        public unsafe void M4(char *pc, Color **pf)  ... 
        public unsafe void M5(void *pv, double *[][,] pd)  ... 
        public void M6(int i, params object[] args)  ... 
    

    class MyList<T>
    
        public void Test(T t)  ... 
    

    class UseList
    
        public void Process(MyList<int> list)  ... 
        public MyList<T> GetValues<T>(T value)  ...  
    

IDs:

"M:Acme.ValueType.M(System.Int32)"
"M:Acme.Widget.NestedClass.M(System.Int32)"
"M:Acme.Widget.M0"
"M:Acme.Widget.M1(System.Char,System.Single@,Acme.ValueType@)"
"M:Acme.Widget.M2(System.Int16[],System.Int32[0:,0:],System.Int64[][])"
"M:Acme.Widget.M3(System.Int64[][],Acme.Widget[0:,0:,0:][])"
"M:Acme.Widget.M4(System.Char*,Color**)"
"M:Acme.Widget.M5(System.Void*,System.Double*[0:,0:][])"
"M:Acme.Widget.M6(System.Int32,System.Object[])"
"M:Acme.MyList`1.Test(`0)"
"M:Acme.UseList.Process(Acme.MyListSystem.Int32)"
"M:Acme.UseList.GetValues``1(``0)"

Properties and indexers

namespace Acme

    class Widget : IProcess
    
        public int Width  get  ...  set  ...  
        public int this[int i]  get  ...  set  ...  
        public int this[string s, int i]  get  ...  set  ...  
    

IDs:

"P:Acme.Widget.Width"
"P:Acme.Widget.Item(System.Int32)"
"P:Acme.Widget.Item(System.String,System.Int32)"

Events

namespace Acme

    class Widget : IProcess
    
        public event Del AnEvent;
    

IDs:

"E:Acme.Widget.AnEvent"

Unary operators

namespace Acme

    class Widget : IProcess
    
        public static Widget operator+(Widget x)  ... 
    

IDs:

"M:Acme.Widget.op_UnaryPlus(Acme.Widget)"

The complete set of unary operator function names used is as follows: op_UnaryPlus, op_UnaryNegation, op_LogicalNot, op_OnesComplement, op_Increment, op_Decrement, op_True, and op_False.

Binary operators

namespace Acme

    class Widget : IProcess
    
        public static Widget operator+(Widget x1, Widget x2)  ... 
    

IDs:

"M:Acme.Widget.op_Addition(Acme.Widget,Acme.Widget)"

The complete set of binary operator function names used is as follows: op_Addition, op_Subtraction, op_Multiply, op_Division, op_Modulus, op_BitwiseAnd, op_BitwiseOr, op_ExclusiveOr, op_LeftShift, op_RightShift, op_Equality, op_Inequality, op_LessThan, op_LessThanOrEqual, op_GreaterThan, and op_GreaterThanOrEqual.

Conversion operators have a trailing “~” followed by the return type.

namespace Acme

    class Widget : IProcess
    
        public static explicit operator int(Widget x)  ... 
        public static implicit operator long(Widget x)  ... 
    

IDs:

"M:Acme.Widget.op_Explicit(Acme.Widget)~System.Int32"
"M:Acme.Widget.op_Implicit(Acme.Widget)~System.Int64"

D.5 An example

D.5.1 C# source code

The following example shows the source code of a Point class:

namespace Graphics

    /// <summary>
    /// Class <c>Point</c> models a point in a two-dimensional plane.
    /// </summary>
    public class Point
    
        /// <value>
        /// Property <c>X</c> represents the point's x-coordinate.
        /// </value>
        public int X  get; set; 
        
        /// <value>
        /// Property <c>Y</c> represents the point's y-coordinate.
        /// </value>
        public int Y  get; set; 
        
        /// <summary>
        /// This constructor initializes the new Point to (0,0).
        /// </summary>
        public Point() : this(0, 0) 
        
        /// <summary>
        /// This constructor initializes the new Point to
        /// (<paramref name="xPosition"/>,<paramref name="yPosition"/>).
        /// </summary>
        /// <param><c>xPosition</c> is the new Point's x-coordinate.</param>
        /// <param><c>yPosition</c> is the new Point's y-coordinate.</param>
        public Point(int xPosition, int yPosition) 
        
            X = xPosition;
            Y = yPosition;
        
        
        /// <summary>
        /// This method changes the point's location to
        /// the given coordinates. <see cref="Translate"/>
        /// </summary>
        /// <param><c>xPosition</c> is the new x-coordinate.</param>
        /// <param><c>yPosition</c> is the new y-coordinate.</param>
        public void Move(int xPosition, int yPosition) 
        
            X = xPosition;
            Y = yPosition;
        
        
        /// <summary>
        /// This method changes the point's location by
        /// the given x- and y-offsets.
        /// <example>For example:
        /// <code>
        /// Point p = new Point(3, 5);
        /// p.Translate(-1, 3);
        /// </code>
        /// results in <c>p</c>'s having the value (2, 8).
        /// <see cref="Move"/>
        /// </example>
        /// </summary>
        /// <param><c>dx</c> is the relative x-offset.</param>
        /// <param><c>dy</c> is the relative y-offset.</param>
        public void Translate(int dx, int dy)
        
            X += dx;
            Y += dy;
        
        
        /// <summary>
        /// This method determines whether two Points have the same location.
        /// </summary>
        /// <param>
        /// <c>o</c> is the object to be compared to the current object.
        /// </param>
        /// <returns>
        /// True if the Points have the same location and they have
        /// the exact same type; otherwise, false.
        /// </returns>
        /// <seealso cref="operator=="/>
        /// <seealso cref="operator!="/>
        public override bool Equals(object o)
        
            if (o == null)
            
                return false;
            
            if ((object)this == o) 
            
                return true;
            
            if (GetType() == o.GetType()) 
            
                Point p = (Point)o;
                return (X == p.X) && (Y == p.Y);
            
            return false;
        

        /// <summary>
        /// This method returns a Point's hashcode.
        /// </summary>
        /// <returns>
        /// The int hashcode.
        /// </returns>
        public override int GetHashCode()
        
            return X + (Y >> 4);    // a crude version
        
        
        /// <summary>Report a point's location as a string.</summary>
        /// <returns>
        /// A string representing a point's location, in the form (x,y),
        /// without any leading, training, or embedded whitespace.
        /// </returns>
        public override string ToString() => $"(X,Y)";
        
        /// <summary>
        /// This operator determines whether two Points have the same location.
        /// </summary>
        /// <param><c>p1</c> is the first Point to be compared.</param>
        /// <param><c>p2</c> is the second Point to be compared.</param>
        /// <returns>
        /// True if the Points have the same location and they have
        /// the exact same type; otherwise, false.
        /// </returns>
        /// <seealso cref="Equals"/>
        /// <seealso cref="operator!="/>
        public static bool operator==(Point p1, Point p2)
        
        
        /// <summary>
        /// This operator determines whether two Points have the same location.
        /// </summary>
        /// <param><c>p1</c> is the first Point to be compared.</param>
        /// <param><c>p2</c> is the second Point to be compared.</param>
        /// <returns>
        /// True if the Points do not have the same location and the
        /// exact same type; otherwise, false.
        /// </returns>
        /// <seealso cref="Equals"/>
        /// <seealso cref="operator=="/>
        public static bool operator!=(Point p1, Point p2) => !(p1 == p2);
    

D.5.2 Resulting XML

Here is the output produced by one documentation generator when given the source code for class Point, shown above:

<?xml version="1.0"?>
<doc>
  <assembly>
    <name>Point</name>
  </assembly>
  <members>
    <member name="T:Graphics.Point">
    <summary>Class <c>Point</c> models a point in a two-dimensional
    plane.
    </summary>
    </member>
    <member name="M:Graphics.Point.#ctor">
      <summary>This constructor initializes the new Point to (0, 0).</summary>
    </member>
    <member name="M:Graphics.Point.#ctor(System.Int32,System.Int32)">
      <summary>
        This constructor initializes the new Point to
        (<paramref name="xPosition"/>,<paramref name="yor"/>).
      </summary>
      <param><c>xPosition</c> is the new Point's x-coordinate.</param>
      <param><c>yPosition</c> is the new Point's y-coordinate.</param>
    </member>
    <member name="M:Graphics.Point.Move(System.Int32,System.Int32)">
      <summary>
        This method changes the point's location to
        the given coordinates.
        <see cref="M:Graphics.Point.Translate(System.Int32,System.Int32)"/>
      </summary>
      <param><c>xPosition</c> is the new x-coordinate.</param>
      <param><c>yPosition</c> is the new y-coordinate.</param>
      </member>
    <member name="M:Graphics.Point.Translate(System.Int32,System.Int32)">
      <summary>
        This method changes the point's location by
        the given x- and y-offsets.
        <example>For example:
        <code>
        Point p = new Point(3,5);
        p.Translate(-1,3);
        </code>
        results in <c>p</c>'s having the value (2,8).
        </example>
        <see cref="M:Graphics.Point.Move(System.Int32,System.Int32)"/>
      </summary>
      <param><c>dx</c> is the relative x-offset.</param>
      <param><c>dy</c> is the relative y-offset.</param>
    </member>
    <member name="M:Graphics.Point.Equals(System.Object)">
      <summary>
        This method determines whether two Points have the same location.
      </summary>
      <param>
        <c>o</c> is the object to be compared to the current object.
      </param>
      <returns>
        True if the Points have the same location and they have
        the exact same type; otherwise, false.
      </returns>
      <seealso 
        cref="M:Graphics.Point.op_Equality(Graphics.Point,Graphics.Point)" />
      <seealso 
        cref="M:Graphics.Point.op_Inequality(Graphics.Point,Graphics.Point)"/>
    </member>
     <member name="M:Graphics.Point.ToString">
      <summary>
        Report a point's location as a string.
      </summary>
      <returns>
        A string representing a point's location, in the form (x,y),
        without any leading, training, or embedded whitespace.
      </returns>
     </member>
    <member name="M:Graphics.Point.op_Equality(Graphics.Point,Graphics.Point)">
      <summary>
        This operator determines whether two Points have the same location.
      </summary>
      <param><c>p1</c> is the first Point to be compared.</param>
      <param><c>p2</c> is the second Point to be compared.</param>
      <returns>
        True if the Points have the same location and they have
        the exact same type; otherwise, false.
      </returns>
      <seealso cref="M:Graphics.Point.Equals(System.Object)"/>
      <seealso
        cref="M:Graphics.Point.op_Inequality(Graphics.Point,Graphics.Point)"/>
    </member>
    <member
        name="M:Graphics.Point.op_Inequality(Graphics.Point,Graphics.Point)">
      <summary>
        This operator determines whether two Points have the same location.
      </summary>
      <param><c>p1</c> is the first Point to be compared.</param>
      <param><c>p2</c> is the second Point to be compared.</param>
      <returns>
        True if the Points do not have the same location and the
        exact same type; otherwise, false.
      </returns>
      <seealso cref="M:Graphics.Point.Equals(System.Object)"/>
      <seealso
        cref="M:Graphics.Point.op_Equality(Graphics.Point,Graphics.Point)"/>
      </member>
      <member name="M:Graphics.Point.Main">
        <summary>
          This is the entry point of the Point class testing program.
          <para>
            This program tests each method and operator, and
            is intended to be run after any non-trivial maintenance has
            been performed on the Point class.
          </para>
        </summary>
      </member>
      <member name="P:Graphics.Point.X">
        <value>
          Property <c>X</c> represents the point's x-coordinate.
        </value>
      </member>
      <member name="P:Graphics.Point.Y">
        <value>
          Property <c>Y</c> represents the point's y-coordinate.
        </value>
    </member>
  </members>
</doc>

End of informative text.