Convenciones para los archivos de código fuente (C# y Java)
Actualización: noviembre 2007
La convención de nomenclatura para archivos que contienen clases de C# es un poco diferente a la de Java. En Java, todos los archivos de código fuente tienen extensión .java. Cada archivo de código fuente contiene una declaración de clase pública de nivel superior y el nombre de clase debe coincidir con el nombre de archivo. Es decir, una clase denominada Customer declarada con un ámbito público se debe definir en un archivo de código fuente con el nombre Customer.java.
La extensión .cs indica que se trata de código fuente de C#. A diferencia de Java, los archivos de código fuente pueden contener más de una declaración de clase pública de nivel superior y no es necesario que el nombre de archivo coincida con ninguno de los nombres de las clases.
Declaraciones de nivel superior
En Java y C#, el código fuente comienza con algunas declaraciones de nivel superior en una secuencia determinada. Existen sólo algunas diferencias entre las declaraciones realizadas en programas de Java y C#.
Declaraciones de nivel superior en Java
En Java, puede agrupar las clases con la palabra clave package. Una clase empaquetada debe utilizar la palabra clave package en la primera línea ejecutable del archivo de código fuente. A continuación de ésta viene cualquier instrucción de importación necesaria para tener acceso a clases de otros paquetes y, a continuación, la declaración de clase, como se muestra a continuación:
package Acme;
import java.io.*;
class Customer
{
...
}
Declaraciones de nivel superior en C#
C# utiliza el concepto de espacio de nombres para agrupar clases relacionadas lógicamente mediante la palabra clave namespace. Éstos actúan de forma similar a los paquetes de Java; además, podría aparecer una clase con el mismo nombre en dos espacios de nombres diferentes. Para tener acceso a clases definidas en un espacio de nombres externo al actual, utilice la directiva using seguida del nombre del espacio de nombres, como se muestra a continuación:
using System.IO;
namespace Acme
{
class Customer
{
// ...
}
}
Tenga en cuenta que las directivas using se pueden colocar dentro de una declaración de espacio de nombres, en cuyo caso esos espacios de nombres importados forman parte del espacio de nombres contenedor.
Java no permite varios paquetes en el mismo archivo de código fuente. Sin embargo, C# permite varios espacios de nombres en un solo archivo .cs, como se muestra a continuación:
namespace AcmeAccounting
{
public class GetDetails
{
// ...
}
}
namespace AcmeFinance
{
public class ShowDetails
{
// ...
}
}
Nombres completos y alias de espacios de nombres
Al igual que en Java, puede tener acceso a clases de .NET Framework o de espacios de nombres definidos por el usuario sin una referencia using para ese espacio de nombres mediante el nombre completo de la clase, como DataSet o AcmeAccounting.GetDetails en el ejemplo anterior.
Los nombres completos pueden ser largos y difíciles de manejar, en cuyo caso puede utilizar la palabra clave using para especificar un nombre corto, o un alias, que haga el código más legible.
En el código siguiente, se crea un alias para hacer referencia al código escrito por una compañía ficticia:
using DataTier = Acme.SQLCode.Client;
class OutputSales
{
static void Main()
{
int sales = DataTier.GetSales("January");
System.Console.WriteLine("January's Sales: {0}", sales);
}
}
Observe que en la sintaxis de WriteLine, con {x} en la cadena de formato, la x denota la posición en la lista de argumentos en la que se va a insertar el valor. Si el método GetSales devolvió 500, el resultado de la aplicación sería el siguiente:
January's Sales: 500
Directivas de preprocesamiento
Al igual que C y C++, C# incluye directivas de preprocesamiento que ofrecen la posibilidad de omitir condicionalmente secciones de archivos de código fuente, informar de errores y condiciones de advertencia y delimitar regiones características del código fuente. El término "directivas de preprocesamiento" sólo se utiliza con el fin de mantener la coherencia con los lenguajes de programación C y C++, puesto que C# no incluye un paso de preprocesamiento independiente. Para obtener más información, vea Directivas de preprocesador de C#.