desbordamientos en operaciones aritméticas, produciéndoseexcepciones cuando se produzcan.
•
Instrucciones seguras
Para evitar errores comunes como se producían programando en otroslenguajes, en C# se han impuesto una serie de restricciones en el uso deinstrucciones de control más comunes. Por ejemplo, la evaluación detoda condición ha de ser una expresión condicional y no aritmética,como ocurría por ejemplo en C o en C++. Así se evitan errores porconfusión del operador igualdad con el de asignación. Otra restricciónque se impone en la instrucción de selección
switch
, imponiendo quetoda selectora de la instrucción finalice con una instrucción
break
o
goto
que indique cuál es la siguiente acción a realizar.
•
Unificación de tipos
En C# todos los tipos derivan de una superclase común llamada
System.Object
, por lo que automáticamente heredarán todos losmiembros definidos en esta clase. Es decir, son
objetos
. A diferencia de Java, en C# esta característica también se aplica para los tipos básicos.
•
Extensión de los operadores básicos
Para facilitar la legibilidad de código y conseguir que los nuevos tipos dedatos que se definan a través de las estructuras estén al mismo nivelque los elementos predefinidos en el lenguaje, al igual que C++ pero adiferencia de Java, C# permite redefinir el significado de la mayoría delos operadores (incluidos el de la conversión) cuando se apliquen adiferentes tiops de objetos.
Las redefiniciones de operadores se hacen de manera inteligente, de modo que a partir de una única definición de los operadores
++
y
-
el compilador puede deducir automáticamente cómo ejecutarlos de manera prefija y postfija. Definiendooperadores simples como la suma, el compilador deduce como aplicar la versión deasignación compuesta (
+=
). Además, para asegurar la consistencia, el compilador exige que los operadores con opuesto (como por ejemplo el operador igualdad
==
ysu opuesto
!=
) siempre se redefinan por parejas.
•
Extensión de modificadores
C# ofrece, a través de los
atributos
, la posiblidad de añadir a losmetadatos del módulo resultante de la compilación de cualquier fuenteinformación adicional a la generada por el compilador que luego podráser consultada en tiempo de ejecución a través de la biblioteca dereflexión de .NET.
•
Eficiente
En C#, todo el código incluye numerosas restricciones para garantizar suseguridad, no permitiendo el uso de punteros. Sin embargo, y adiferencia de Java, existen modificadores para saltarse esta restricción,pudiendo manipular objetos a través de punteros. Para ello bastaidentificar regiones de código con el identificador
unsafe
, y podránusarse en ellas punteros de forma similar a como se hace en C++. Estacaracterística puede resultar de utilidad en situaciones en las que senecesite gran velocidad de procesamiento.