{"id":317,"date":"2026-03-06T21:02:05","date_gmt":"2026-03-06T21:02:05","guid":{"rendered":"https:\/\/hackcuba.net\/?p=317"},"modified":"2026-03-06T21:02:05","modified_gmt":"2026-03-06T21:02:05","slug":"comentando-c-con-xml","status":"publish","type":"post","link":"https:\/\/hackcuba.net\/?p=317","title":{"rendered":"Comentando C# con XML"},"content":{"rendered":"\n<p>Aunque muchos de nosotros no acostumbramos a comentar nuestro c\u00f3digo, porque creemos que no vale la pena o nos dejamos arrastrar por la haraganer\u00eda, estamos conscientes que un programa no comentado es un problema colosal a la hora del mantenimiento. En Microsoft, se refieren a comentar como una <em>Best Practice<\/em> para el desarrollo de cualquier tipo de aplicaci\u00f3n. Por tal motivo, el lenguaje insignia de su plataforma .NET incorpora desde su primera versi\u00f3n en Visual Studio .NET 2003, la facilidad de que su IDE se relacione directamente con un estilo particular de comentar c\u00f3digo. Por supuesto, estamos hablando de C# y la documentaci\u00f3n XML.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Aunque para nada son obsoletos los <code>\/\/<\/code> y <code>\/**\/<\/code>, los comentarios XML son usados por el IDE para describirnos, en tiempo real, las caracter\u00edsticas de los m\u00e9todos u objetos comentados cuando en un futuro los estemos utilizando. Recuerden, por ejemplo, como siempre que usamos un objeto <em>X<\/em> y escribimos un punto a continuaci\u00f3n de su identificador (<code>x.<\/code>), enseguida nos muestra una lista de las opciones disponibles, como sus m\u00e9todos, y de estos su tipo de retorno, descripci\u00f3n, par\u00e1metros, etc. Esto sucede porque dichos m\u00e9todos fueron comentados con XML. En la siguiente imagen podemos llevarnos mejor la idea:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"577\" height=\"246\" src=\"https:\/\/hackcuba.net\/wp-content\/uploads\/2026\/03\/0x660017.png\" alt=\"\" class=\"wp-image-318\" srcset=\"https:\/\/hackcuba.net\/wp-content\/uploads\/2026\/03\/0x660017.png 577w, https:\/\/hackcuba.net\/wp-content\/uploads\/2026\/03\/0x660017-300x128.png 300w\" sizes=\"auto, (max-width: 577px) 100vw, 577px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Creando comentarios XML:<\/h2>\n\n\n\n<p>Con XML podemos comentar: clases, delegados, interfaces, campos, eventos, propiedades y m\u00e9todos. La manera de trabajar con todos es, antes de su definici\u00f3n, teclear tres \u00b4\/\u00b4 (<code>\/\/\/<\/code>) y aparecer\u00e1, en dependencia del caso, una estructura en XML a completar.<\/p>\n\n\n\n<p>Para el caso de un m\u00e9todo <code>string Califica(int nota){}<\/code>, aparecer\u00e1:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n\/\/\/&lt;summary&gt;\n\/\/\/Este m\u00e9todo califica en Excelente, Muy Bien, Bien\u2026\n\/\/\/&lt;\/summary&gt;\n\/\/\/&lt;param name=&quot;nota&quot;&gt;Nota cuantitativa del estudiante&lt;\/param&gt;\n\/\/\/ &lt;returns&gt;Nota cualitativa&lt;\/returns&gt;\npublic string Califica(int nota)\n<\/pre><\/div>\n\n\n<p>Seguro se dan cuenta de para qu\u00e9 se utilizan etiquetas como <code>summary<\/code>, <code>param<\/code> y <code>returns<\/code>. Vamos a ver como nos clasifica Jos\u00e9 Antonio Gonz\u00e1lez Seco en su libro <a href=\"http:\/\/www.programacion.net\/tutorial\/csharp\/20\/#csharp_19\" target=\"_blank\" rel=\"noreferrer noopener\">\u00abEl lenguaje de programaci\u00f3n C#\u00bb<\/a>, muchas de ellas:<\/p>\n\n\n\n<p><strong>Etiquetas de uso gen\u00e9rico<\/strong><br>\u00c9stas se utilizan para cualquier objeto que tratemos de comentar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>&lt;summary><\/code>: Su contenido se utiliza para indicar un resumen sobre el significado del elemento al que precede. Cuando utilizamos el operador <code>.<\/code> para acceder a alg\u00fan miembro de un objeto se mostrar\u00e1 esta informaci\u00f3n.<\/li>\n\n\n\n<li><code>&lt;remarks><\/code>: Su contenido indica una explicaci\u00f3n detallada sobre el elemento al que precede. Se recomienda usar <code>&lt;remarks><\/code> para dar una explicaci\u00f3n detallada de los tipos de datos y <code>&lt;summary><\/code> para dar una resumida de cada uno de sus miembros.<\/li>\n\n\n\n<li><code>&lt;example><\/code>: Su contenido es un ejemplo sobre c\u00f3mo usar el elemento al que precede.<\/li>\n\n\n\n<li><code>&lt;seealso><\/code>: Se usa para indicar un elemento cuya documentaci\u00f3n guarda alguna relaci\u00f3n con la del elemento al que precede.<\/li>\n\n\n\n<li><code>&lt;permission><\/code>: Se utiliza para indicar qu\u00e9 permiso necesita un elemento para poder funcionar.<\/li>\n<\/ul>\n\n\n\n<p><strong>Etiquetas relativas a m\u00e9todos<\/strong><br>Adem\u00e1s de las etiquetas de uso general ya vistas, en las definiciones de m\u00e9todos se pueden usar las siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>&lt;param><\/code>: Permite documentar el significado de un par\u00e1metro de un m\u00e9todo.<\/li>\n\n\n\n<li><code>&lt;paramref><\/code>: Se usa para referenciar a par\u00e1metros de m\u00e9todos. No tiene contenido y el nombre del par\u00e1metro referenciado se indica en su atributo <code>name<\/code>.<\/li>\n\n\n\n<li><code>&lt;returns><\/code>: Permite documentar el significado del valor de retorno de un m\u00e9todo.<\/li>\n<\/ul>\n\n\n\n<p><strong>Etiquetas relativas a propiedades<\/strong><br>El uso m\u00e1s habitual de una propiedad consiste en controlar la forma en que se accede a un campo privado, por lo que \u00e9sta se comporta como si almacenase un valor. Mediante el contenido de la etiqueta <code>&lt;value&gt;<\/code> es posible describir el significado de ese valor:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n\/\/\/ &lt;value&gt;Edad de la persona representada&lt;\/value&gt;\npublic int Edad{\n\u00a0\u00a0set { edad = (value&lt;0)? 0:value }\n\u00a0\u00a0get { return edad; }\n}\n<\/pre><\/div>\n\n\n<p><strong>Etiquetas relativas a excepciones<\/strong><br>Para documentar el significado de un tipo defindo como excepci\u00f3n, puede incluirse un resumen sobre el mismo como contenido de una etiqueta de documentaci\u00f3n <code>&lt;exception&gt;<\/code> que preceda a su definici\u00f3n. El atributo <code>cref<\/code> de \u00e9sta suele usarse para indicar la clase de la que deriva la excepci\u00f3n definida. Por ejemplo:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\n&lt;exception cref=&quot;System.Exception&quot;&gt;\n\/\/\/ Excepci\u00f3n creada para cuando se reproduzca reggaeton.\n\/\/\/ &lt;\/exception&gt;\nclass MusicException: Exception\n{}\n<\/pre><\/div>\n\n\n<p><strong>Etiquetas relativas a formato<\/strong><br>Para mejorar la forma de expresar el contenido (simple pacotilla) de las etiquetas de documentaci\u00f3n que se utilicen, es posible incluir en ellas las siguientes etiquetas de formato:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>&lt;see><\/code>:Se utiliza para indicar hiperv\u00ednculos a otros elementos de la documentaci\u00f3n generada. Nos puede interesar relacionar un objetivo con otro ya comentado.<\/li>\n\n\n\n<li><code>&lt;code><\/code> y <code>&lt;c><\/code>: Ambas etiquetas se usan para delimitar textos han de ser considerarse fragmentos de c\u00f3digo fuente.<\/li>\n\n\n\n<li><code>&lt;para><\/code>: Se usa para delimitar p\u00e1rrafos dentro del texto contenido en otras etiquetas. Como <code>&lt;p>&lt;\/p><\/code> en HTML.<\/li>\n\n\n\n<li><code>&lt;list><\/code>: Se utiliza para incluir listas y tablas como contenido de otras etiquetas.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Generar un archivo XML sobre la solucion comentada:<\/h2>\n\n\n\n<p>Podemos crear archivos XML que se compilen al mismo tiempo de la compilaci\u00f3n del c\u00f3digo. Estos archivos son dif\u00edcil de entender, por lo que hay que agregarle al comienzo una l\u00ednea que especif\u00edque la hoja de estilo con que se quiere publicar.<\/p>\n\n\n\n<p><code>&lt;?xml:stylesheet href=\"&lt;ficheroXSL&gt;\" type=\"text\/xsl\"?&gt;<\/code><\/p>\n\n\n\n<p>Si no sabemos crear hojas de estilo XSL, podemos generar reportes web con Visual Studio como veremos m\u00e1s adelante. Para crear un archivo XML sobre la documentaci\u00f3n cuando se compile la soluci\u00f3n:<\/p>\n\n\n\n<p><strong>VS 2003<\/strong>: <em>View<\/em> \u00bb <em>Property Pages<\/em> \u00bb <em>Configuration Properties<\/em> \u00bb <em>Build<\/em> \u00bb <em>XML Documentation File<\/em>. En el di\u00e1logo que aparece especificar el nombre de la documentaci\u00f3n en XML.<\/p>\n\n\n\n<p><strong>VS 2005<\/strong>: <em>Project<\/em> \u00bb <em>Application Properties<\/em> \u00bb <em>Build<\/em> \u00bb <em>Output<\/em> \u00bb <em>XML Docum. File<\/em>. Al igual que en el caso anterior, indicar d\u00f3nde quieres el archivo y con qu\u00e9 nombre.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Generar Reporte Web de Comentarios:<\/h2>\n\n\n\n<p>Visual Studio .NET permite generar autom\u00e1ticamente un reporte en formato HTML de todos los comentarios XML que fueron colocados en el proyecto o soluci\u00f3n; si la soluci\u00f3n tiene m\u00e1s de un proyecto se documentar\u00e1n todas las clases con sus respectivos m\u00e9todos y miembros clasificadas de acuerdo a sus respectivos proyectos.<\/p>\n\n\n\n<p>Para utilizar esta herramienta en VS 2003 apuntamos al men\u00fa de <em>Herramientas<\/em> (<em>Tools<\/em>), y seleccionamos la opci\u00f3n <em>Generar Reporte Web de Comentarios<\/em> (<em>Build Comment Web Pages<\/em>), tal como se muestra en la siguiente figura:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"342\" height=\"357\" src=\"https:\/\/hackcuba.net\/wp-content\/uploads\/2026\/03\/0x660018.jpg\" alt=\"\" class=\"wp-image-319\" srcset=\"https:\/\/hackcuba.net\/wp-content\/uploads\/2026\/03\/0x660018.jpg 342w, https:\/\/hackcuba.net\/wp-content\/uploads\/2026\/03\/0x660018-287x300.jpg 287w\" sizes=\"auto, (max-width: 342px) 100vw, 342px\" \/><\/figure>\n\n\n\n<p>Aparecer\u00e1 un cuadro de di\u00e1logo que nos presentar\u00e1 dos opciones:<br>\u2022 Realizar los comentarios de toda la soluci\u00f3n.<br>\u2022 Realizar los comentarios de los proyectos seleccionados.<\/p>\n\n\n\n<p>La lista de proyectos se encuentra bajo estas dos opciones, donde se puede seleccionar los proyectos a los cuales se aplicar\u00e1 la generaci\u00f3n de los Comentarios Web. Luego de esto podemos seleccionar la carpeta de destino del archivo de Comentarios Web, el mismo que puede ser a\u00f1adido a los Favoritos de Internet Explorer para poder acceder a \u00e9l directamente. Dejaremos las opciones predeterminadas.<\/p>\n\n\n\n<p>Realizando este art\u00edculo, trat\u00e9 de generar un reporte en VS 2005 y no encontr\u00e9 la manera. Por lo menos no aparece expl\u00edcitamente. Si alg\u00fan lector ha resuelto este inconveniente, por favor, tire algunos <em>strings<\/em> para <strong>BlackHat<\/strong> con la soluci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusiones:<\/h2>\n\n\n\n<p>Como pudimos ver, es posible crear la documentaci\u00f3n de nuestro proyecto de forma autom\u00e1tica, s\u00f3lo completando las etiquetas del XML. El hecho que la misma se genera a partir de los fuentes permite hacer ambas cosas a la vez, programar y documentar. Si eso no fuera un fuerte motivo, utilizar las bondades del <em>IntelliSense<\/em> del IDE, a la hora de usar m\u00e9todos, clases o variables nos compromete a\u00fan m\u00e1s con la idea.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Para saber m\u00e1s&#8230;<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"http:\/\/www.microsoft.com\/spanish\/msdn\/comunidad\/mtj.net\/voices\/art194.asp\" target=\"_blank\" rel=\"noreferrer noopener\">Art\u00edculo en el MSDN sobre el tema.<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/www.programacion.net\/tutorial\/csharp\/20\/#csharp_19\" target=\"_blank\" rel=\"noreferrer noopener\">Cap\u00edtulo del libro de C# de Gonz\u00e1lez Seco.<\/a><\/li>\n\n\n\n<li><a href=\"ms-help:\/\/MS.VSCC.v80\/MS.MSDN.v80\/MS.VisualStudio.v80.en\/dv_csref\/html\/803b7f7b-7428-4725-b5db-9a6cff273199.htm\" target=\"_blank\" rel=\"noreferrer noopener\">En la ayuda del VS (MSDN).<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/XML\" target=\"_blank\" rel=\"noreferrer noopener\">XML in Wikipedia.<\/a><\/li>\n\n\n\n<li><a href=\"http:\/\/en.wikipedia.org\/wiki\/Microsoft_.NET_Framework\" target=\"_blank\" rel=\"noreferrer noopener\">.NET Framework in Wikipedia.<\/a><\/li>\n<\/ul>\n\n\n\n<p>Escrito por Krlo [<a href=\"mailto:blackhat4all@gmail.com?subject=para Krlo\">blackhat4all@gmail.com<\/a>]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Aunque muchos de nosotros no acostumbramos a comentar nuestro c\u00f3digo, porque creemos que no vale la pena o<\/p>\n","protected":false},"author":2,"featured_media":261,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18,36],"tags":[102,58,38],"class_list":["post-317","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programacion","category-proyecto-blackhat","tag-c-2","tag-programacion","tag-proyecto-blackhat"],"_links":{"self":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts\/317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=317"}],"version-history":[{"count":1,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts\/317\/revisions"}],"predecessor-version":[{"id":320,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/posts\/317\/revisions\/320"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=\/wp\/v2\/media\/261"}],"wp:attachment":[{"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hackcuba.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}