UnADM
Universidad Abierta y
a Distancia de México
Ingeniería en Desarrollo de Software
Programación NET I
Unidad 1 : Actividad 2
Luis Antonio Quezada González
AL12506779
Operadores C# Categoría Operador Descripción
Primario x.y El operador de punto (.) se utiliza para el acceso a miembros. El operador de punto especifica un miembro de un tipo o espacio de nombres. Por ejemplo, el operador de punto se utiliza para tener acceso a métodos específicos dentro de las bibliotecas de clases de .NET Framework:
f(x) Además de usarlos para especificar el orden de las operaciones en una expresión, los paréntesis se utilizan para realizar las siguientes tareas:
Especificar conversiones o conversiones de tipo. Invocar métodos o delegados.
a[x] Los corchetes ([]) se utilizan para matrices, indizadores y atributos. También se pueden utilizar con punteros.
x++ El operador de incremento (++) incrementa su operando en 1. El operador de incremento puede aparecer antes o después de su operando.
x-- El operador de decremento (--) decrementa su operando en 1. El operador de decremento puede aparecer antes o después de su
operando: --variable y variable--. La primera forma es una operación de decremento prefijo. El resultado de la operación es el valor del operando "después" de haber sido decrementado. La segunda forma es una operación de decremento postfijo. El resultado de la operación es el valor del operando "antes" de haber sido decrementado.
new Se utiliza para crear objetos e invocar constructores. Por ejemplo: Class1 obj = new Class1();
typeof Obtenga el objeto System.Type para un tipo. Una expresión typeof se presenta de la siguiente forma:
System.Type type = typeof(int);
checked La palabra clave checked se usa con el fin de habilitar
explícitamente la comprobación de desbordamiento para operaciones aritméticas y conversiones de tipo integral.
unchecked La palabra clave unchecked se utiliza con el fin de suprimir la comprobación de desbordamiento para operaciones aritméticas y conversiones de tipo integral.
default(T) Un problema asociado a las clases y métodos genéricos es la forma de asignar un valor predeterminado a un tipo parametrizado T cuando no se tiene por anticipado la siguiente información:
Si T será un tipo de referencia o un tipo de valor.
Si T es un tipo de valor, si será un valor numérico o un struct. Dada una variable t de un tipo parametrizado T, la instrucción t = null sólo es válida si T es un tipo de referencia y t = 0 sólo funcionará con los tipos de valor numérico, pero no con los structs. La solución es utilizar la palabra clave default, que devolverá null para los tipos de referencia y cero para los tipos de valor numérico. En el caso de los structs, devolverá cada miembro del struct inicializado con el valor cero o null, dependiendo de si son tipos de valor o de referencia. Para los tipos de valor que aceptan valores NULL, default devuelve Nullable, que se inicializa como cualquier struct.
delegate En versiones de C# anteriores a la versión 2.0, la única manera de declarar un delegado era utilizar métodos con nombre. C# 2.0
introdujo los métodos anónimos, mientras que, en C# 3.0 y versiones posteriores, las expresiones lambda reemplazan a los métodos
anónimos como la manera preferente de escribir código insertado. No obstante, la información sobre los métodos anónimos de este tema también se aplica a las expresiones lambda. Hay un caso en el que un método anónimo proporciona una funcionalidad que no se encuentra en las expresiones lambda. Los métodos anónimos permiten omitir la lista de parámetros. Esto significa que los métodos anónimos pueden
convertirse en delegados con diversas firmas. Esto no es posible con expresiones lambda.
sizeof Se usa para obtener el tamaño en bytes de un tipo no
administrado. Los tipos no administrados incluyen los tipos integrados que se muestran en la tabla que figura a continuación, además de estos:
Tipos de enumeración Tipos de puntero
Structs definidos por el usuario que no contienen ningún campo o propiedad que sea un tipo de referencia
-> El operador -> combina la desreferenciación de un puntero y el acceso a un miembro.
Unario +x Los operadores unarios + se encuentran predefinidos para todos los tipos numéricos. El resultado de una operación unaria + aplicada a un tipo numérico es simplemente el valor del operando.
Los operadores + binarios se encuentran predefinidos para los tipos numéricos y de cadena. Para tipos numéricos, + calcula la suma de sus dos operandos. Cuando al menos uno de los operandos es de tipo string, + concatena las representaciones de tipo string de los operandos.
Los tipos delegados también proporcionan un operador binario +, el cual realiza la concatenación de delegados.
Los tipos definidos por el usuario pueden sobrecargar los operadores unario + y binario +. Las operaciones en tipos enteros se suelen permitir en enumeraciones.
-x Los operadores unarios - se encuentran predefinidos para todos los tipos numéricos. El resultado de una operación unaria - aplicada a un tipo numérico es la negación numérica del operando.
Los operadores binarios - están predefinidos para todos los tipos numéricos y de enumeración de modo que restan el segundo operando del primero.
Los tipos delegados también proporcionan un operador binario -, el cual realiza la eliminación de delegados.
Los tipos definidos por el usuario pueden sobrecargar los operadores unario y binario
!x El operador lógico de negación (!) es un operador unario que niega su operando. Está definido para el tipo bool y devuelve true si, y sólo si, su operando es false.
~x El operador ~ realiza una operación de complemento bit a bit en su operando, lo que tiene el efecto de invertir cada bit. Los
operadores de complemento bit a bit están predefinidos para int, uint, long y ulong.
++x El operador de incremento (++) incrementa su operando en 1. El operador de incremento puede aparecer antes o después de su operando:
--x El operador de decremento (--) decrementa su operando en 1. El operador de decremento puede aparecer antes o después de su
operando: --variable y variable--. La primera forma es una operación de decremento prefijo. El resultado de la operación es el valor del operando "después" de haber sido decrementado. La segunda forma es una operación de decremento postfijo. El resultado de la operación es el valor del operando "antes" de haber sido decrementado. (T)x Además de usarlos para especificar el orden de las operaciones en
una expresión, los paréntesis se utilizan para realizar las siguientes tareas:
Await El operador await se aplica a una tarea en un método asincrónico para suspender la ejecución del método hasta que se complete la tarea esperada. La tarea representa el trabajo en curso.
El método asincrónico en el que se utiliza await debe modificarse mediante la palabra clave async. Este tipo de método, definido
mediante el modificador async y que generalmente contiene una o más expresiones await, se denomina método asincrónico.
&x El operador & unario devuelve la dirección de memoria de su operando (requiere un contexto unsafe).
Los operadores & binarios están predefinidos para los tipos enteros y bool. Para tipos enteros, & calcula la operación AND bit a bit lógica de sus operandos. Para operandos de tipo bool, & calcula la operación lógica AND de sus operandos; es decir, el resultado estrue si, y sólo si ambos operandos son true.
El operador & evalúa ambos operadores sin tener en cuenta el valor del primero. Por ejemplo:
int i = 0;
if (false & ++i == 1) {
// i is incremented, but the conditional // expression evaluates to false, so // this block does not execute. }
*x El operador * también se utiliza para declarar los tipos de puntero y para desreferenciar los punteros. Este operador sólo se puede utilizar en contextos no seguros, indicados por el uso de la palabra clave unsafe, y que requieren la opción del compilador /unsafe. El operador de desreferenciación también se conoce como el operador de direccionamiento indirecto.
Los tipos definidos por el usuario pueden sobrecargar el operador binario * (vea operator (Referencia de C#)). Cuando se sobrecarga un operador binario, el operador de asignación correspondiente, si existe, también se sobrecarga de modo implícito.
Multiplicativo x*y Operador de multiplicación (*) que calcula el producto de sus operandos. Además, operador de desreferenciación que permite leer y escribir en un puntero.
x/y El operador de división (/) permite dividir su primer operando por su segundo operando. Todos los tipos numéricos poseen operadores de división predefinidos.
x%y El operador & puede funcionar como operador unario o binario.
Sumatorio x+y El operador + puede funcionar como operador unario o binario. x-y El operador - puede funcionar como operador unario o binario.
Desplazamiento x<<y El operador de desplazamiento a la izquierda (<<) desplaza su primer operando a la izquierda el número de bits especificado por su
segundo operando. El tipo del segundo operando debe ser un int o un tipo que tiene una conversión numérica implícita predefinida enint. x>>y El operador de desplazamiento a la derecha (>>) desplaza su primer
operando a la derecha el número de bits especificado por su segundo operando.
Comprobación de tipos y relacionales
x<y Todos los tipos numéricos y de enumeración definen un operador relacional "menor que" (<) que devuelve true si el primer operando es menor que el segundo y false en caso contrario.
x>y Todos los tipos numéricos y de enumeración definen un operador relacional "mayor que" (>) que devuelve true si el primer operando es mayor que el segundo y false en caso contrario.
x<=y Todos los tipos numéricos y de enumeración definen un operador relacional "menor o igual que" (<=) que devuelve true si el primer operando es menor o igual que el segundo y devuelve false en caso contrario.
x>=y Todos los tipos numéricos y de enumeración definen un operador relacional "mayor o igual que" (>=) que devuelve true si el primer operando es mayor o igual que el segundo, y devuelve false en caso contrario.
is Comprueba si un objeto es compatible con un tipo determinado. Por ejemplo, el código siguiente puede determinar si un objeto es una instancia del tipo MyObject o un tipo que se deriva de MyObject: as Puede utilizar el operador de as para realizar algunos tipos de
conversiones entre los tipos de referencia compatibles o tipos que aceptan valores NULL. El siguiente fragmento de código muestra un ejemplo.
Igualdad x==y Para los tipo de valor predefinidos, el operador de igualdad (==) devuelve true si los valores de sus operandos son iguales y false en caso contrario. Para los tipos de referencia,
excepto string, == devuelve true si sus dos operandos se refieren al mismo objeto. Para el tipostring, == compara los valores de las cadenas.
x!=y El operador de desigualdad (!=) devuelve false si sus dos operandos son iguales; en caso contrario, devuelve true. Los operadores de desigualdad están predefinidos para todos los tipos, incluidos string y object. Los tipos definidos por el usuario pueden sobrecargar el operador !=
AND logico x&y El operador & unario devuelve la dirección de memoria de su operando (requiere un contexto unsafe).
Los operadores & binarios están predefinidos para los tipos enteros y bool. Para tipos enteros, & calcula la operación AND bit a bit lógica de sus operandos. Para operandos de tipo bool, & calcula la operación lógica AND de sus operandos; es decir, el resultado estrue si, y sólo si ambos operandos son true.
XOR logico x^y Los operadores binarios ^ están predefinidos para tipos enteros y bool. Para los tipos enteros, ^ calcula la operación OR exclusiva bit a bit de sus operandos. Para los operandos bool, ^ calcula la operación OR exclusiva lógica de sus operandos; es decir, el resultado es true si, y sólo si, exactamente uno de sus operandos es true.
OR logico x|y Binary | están predefinidos para los tipos enteros y bool. Para los tipos enteros, |calcula la operación OR bit a bit de sus
operandos. Para los operandos de tipo bool. | calcula la operación lógica OR de sus operandos; es decir, el resultado es false si, y solo si, ambos operandos son false.
AND
condicional
x&&y El operador AND condicional (&&) realiza una operación lógica AND de sus operandos de tipo bool, pero sólo evalúa su segundo operando si es necesario.
OR condicional x||y Condicional- operador OR (||) realiza una disyunción lógica de sus operandos bool . Si el primer operando se evalúa como true, el segundo operando no se evalúa. Si el primer operando se evalúa como false, el segundo operador determina si OR la expresión de conjunto se evalúa como true o a false.
Uso combinado de Null
x??y Al operador ?? se le llama el operador de uso combinado de NULL. Dicho operador devuelve el operando izquierdo si no es NULL; de lo contrario, devuelve el operando derecho.
Condicional ?: El operador condicional (?:) devuelve uno de dos valores según el valor de una expresión booleana. A continuación se muestra la sintaxis del operador condicional.
Expresion y asignación de lambada
x = y El operador de asignación (=) almacena el valor del operando situado a su derecha en la ubicación de almacenamiento, propiedad o
indizador indicados por el operando situado a su izquierda y
devuelve el valor como resultado. Los operandos deben ser del mismo tipo (o el operando de la derecha se debe poder convertir
implícitamente al tipo del operando de la izquierda). x += y El operador de asignación y suma.
x-=y Una expresión que utiliza el operador de asignación -=, por ejemplo x*=y El operador de asignación y multiplicación binario.
x%=y El operador de asignación del resto. x&=y El operador de asignación y AND. x|=y El operador de asignación OR.
x^=y El operador de asignación y OR exclusivo.
x<<=y El operador de asignación y desplazamiento a la izquierda. x>>=y El operador de asignación y desplazamiento a la derecha.
=> El token => se denomina operador lambda. Se utiliza en expresiones lambda para separar las variables de entrada del lado izquierdo del cuerpo lambda del lado derecho. Las expresiones lambda son
expresiones insertadas similares a los métodos anónimos, pero más flexibles; se utilizan mucho en las consultas de LINQ que se expresan en la sintaxis del método.
Tipos de Conversion Tipo de Conversion Descripcion
Conversiones implícitas En los tipos numéricos integrados, puede realizarse una conversión implícita cuando el valor que se va a almacenar puede ajustarse a la variable sin necesidad de truncamiento o redondeo. Por ejemplo, una variable de
tipo long (entero de 8 bytes) puede almacenar cualquier valor que pueda almacenar a su vez un elemento int (4 bytes en un equipo de 32
bits). En el ejemplo siguiente, el compilador convierte implícitamente el valor de la derecha en un tipo long antes de asignarlo a bigNum.
// Implicit conversion. num long can
// hold any value an int can hold, and more! int num = 2147483647;
long bigNum = num;
Conversiones explícitas Sin embargo, si no se puede realizar una
conversión sin riesgo de perder información, el compilador requiere que se realice una
conversión explícita, denominada conversión de tipo. Una conversión de tipo es una manera de informar al compilador de forma explícita de que pretende realizar la conversión y que está al tanto de que puede producirse una pérdida de datos. Para realizar una conversión de tipo, especifique entre paréntesis el tipo al que se va a aplicar dicha conversión delante del valor o la variable que se va a convertir. El
programa siguiente convierte un tipo double a un tipo int. El programa no se compilará sin el operador de conversión de tipo.
class Test {
static void Main() {
double x = 1234.7; int a;
// Cast double to int. a = (int)x;
System.Console.WriteLine(a); }
Conversiones numericas explicitas validas
De: A:
sbyte byte , ushort, uint, ulong o char
byte Sbyte o char
short sbyte , byte, ushort, uint, ulong o char
ushort sbyte , byte, short o char
int sbyte , byte, short, ushort, uint, ulong,o char
uint sbyte , byte, short, ushort, int o char
Long sbyte , byte, short, ushort, int, uint, ulong o char
ulong sbyte , byte, short, ushort, int, uint, long o char
char sbyte , byte o short
float sbyte , byte, short, ushort, int, uint, long, ulong, char o decimal
double sbyte , byte, short, ushort, int, uint, long, ulong, char, float o decimal
decimal sbyte , byte, short, ushort, int, uint, long, ulong, char, float o double
Fuente: