198 lines
10 KiB
Markdown
198 lines
10 KiB
Markdown
---
|
|
title: The C Programming Language
|
|
localeTitle: El lenguaje de programación C
|
|
---
|
|
## Lo esencial
|
|
|
|
* Preparar
|
|
* Su primer programa de C #
|
|
* Tipos y variables
|
|
* Declaraciones de control de flujo
|
|
* Los operadores
|
|
* Instrumentos de cuerda
|
|
* Clases, objetos, interfaz y métodos principales
|
|
* Campos y propiedades
|
|
* Alcance y modificadores de accesibilidad
|
|
* Manejo de excepciones
|
|
|
|
## Intermedio
|
|
|
|
* Genéricos
|
|
* Eventos, Delegados y Expresiones Lambda.
|
|
* Marco de la colección
|
|
* LINQ
|
|
|
|
## Avanzado
|
|
|
|
* Programación asíncrona (asíncrona y espera)
|
|
* Biblioteca paralela de tareas
|
|
|
|
## ¿Qué hay de nuevo en C # 6?
|
|
|
|
* Operador condicional nulo
|
|
* Inicializadores de propiedad automática
|
|
* Nombre de Expresiones
|
|
* Funciones y propiedades corporales de expresión
|
|
* Otras características
|
|
|
|
## Principios orientados a objetos (OOP)
|
|
|
|
* Encapsulacion
|
|
* Abstracción
|
|
* Herencia
|
|
* Polimorfismo
|
|
|
|
## Principios sólidos
|
|
|
|
* Principio de responsabilidad única
|
|
* Principio cerrado abierto
|
|
* Principio de sustitución de Liskov
|
|
* Principio de Segregación de Interfaz
|
|
* Principio de inversión de dependencia
|
|
|
|
## C # Mejores prácticas, patrones de diseño y desarrollo guiado por pruebas (TDD)
|
|
|
|
## Preparar
|
|
|
|
[LinqPad](http://www.linqpad.net/) es un bloc de notas .NET para probar rápidamente sus fragmentos de código C #. La edición estándar es gratuita y una herramienta perfecta para que los principiantes ejecuten declaraciones de lenguaje, expresiones y programas.
|
|
|
|
Alternativamente, también puede descargar [Visual Studio Community 2015,](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) que es un [IDE](https://en.wikipedia.org/wiki/Integrated_development_environment) extensible utilizado por la mayoría de los profesionales para crear aplicaciones empresariales.
|
|
|
|
## Su primer programa de C #
|
|
```
|
|
//this is the single line comment
|
|
|
|
/** This is multiline comment,
|
|
compiler ignores any code inside comment blocks.
|
|
**/
|
|
|
|
//This is the namespace, part of the standard .NET Framework Class Library
|
|
using System;
|
|
// namespace defines the scope of related objects into packages
|
|
namespace Learning.CSharp
|
|
{
|
|
// name of the class, should be same as of .cs file
|
|
public class Program
|
|
{
|
|
//entry point method for console applications
|
|
public static void Main()
|
|
{
|
|
//print lines on console
|
|
Console.WriteLine("Hello, World!");
|
|
//Reads the next line of characters from the standard input stream.Most common use is to pause program execution before clearing the console.
|
|
Console.ReadLine();
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Cada aplicación de consola C # debe tener un [método principal](https://msdn.microsoft.com/en-gb/library/acy3edy3.aspx) que es el punto de entrada del programa.
|
|
|
|
Edite [HelloWorld](https://dotnetfiddle.net/kY7QRm) en .NET Fiddle, una herramienta inspirada en [JSFiddle](http://jsfiddle.net) donde puede modificar los fragmentos de código y comprobar la salida por sí mismo. Tenga en cuenta que esto es solo para compartir y probar los fragmentos de código, no para utilizarlos en el desarrollo de aplicaciones.
|
|
|
|
Si está utilizando Visual Studio, siga este [tutorial](https://msdn.microsoft.com/en-us/library/k1sx6ed2.aspx) para crear una aplicación de consola y comprender su primer programa de C #.
|
|
|
|
## Tipos y variables
|
|
|
|
C # es un lenguaje fuertemente tipado. Cada variable tiene un tipo. Cada expresión o declaración se evalúa a un valor. Hay dos tipos de tipos en C #
|
|
|
|
* Tipos de valor
|
|
* Tipos de referencia.
|
|
|
|
**Tipos de valor** : las variables que son tipos de valor contienen directamente valores. Al asignar una variable de tipo de valor a otra, se copia el valor contenido.
|
|
|
|
[Editar en .NET Fiddle](https://dotnetfiddle.net/JCkTxb)
|
|
```
|
|
int a = 10;
|
|
int b = 20;
|
|
a=b;
|
|
Console.WriteLine(a); //prints 20
|
|
Console.WriteLine(b); //prints 20
|
|
```
|
|
|
|
Tenga en cuenta que en otros idiomas dinámicos esto podría ser diferente, pero en C # siempre es una copia de valor. Cuando se crea el tipo de valor, se crea un único espacio en la [pila](http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#orgheadline2) , que es una estructura de datos "LIFO" (último en entrar, primero en salir). La pila tiene límites de tamaño y las operaciones de memoria son eficientes. Algunos ejemplos de tipos de datos incorporados son `int, float, double, decimal, char and string` .
|
|
|
|
Tipo | Ejemplo | Descripción
|
|
\--------- | -------------------------------------------------- --------------------------- | -------------------------------------------------- -------------------------------------------------- -----------------------------
|
|
_Entero_ `int fooInt = 7;` | Entero de **32 bits firmado**
|
|
_Largo_ | `long fooLong = 3000L;` | Entero de **64 bits firmado** . **L se utiliza para especificar que este valor de variable es de tipo long / ulong**
|
|
_Doble_ | `double fooDouble = 20.99;` | Precisión: **15-16 dígitos.**
|
|
_Flotar_ `float fooFloat = 314.5f;` | Precisión: **7 dígitos** . **F se utiliza para especificar que este valor de variable es de tipo float**
|
|
_Decimal_ | `decimal fooDecimal = 23.3m;` | Precisión: **28-29 dígitos.** Su mayor precisión y menor alcance lo hace apropiado para **cálculos financieros y monetarios**
|
|
_Char_ | `char fooChar = 'Z';` | Un solo **carácter Unicode de 16 bits.**
|
|
_Booleano_ | `bool fooBoolean = false;` | Booleano - **verdadero y falso**
|
|
_Cadena_ `string fooString = "\"escape\" quotes and add \n (new lines) and \t (tabs);` | **Una cadena de caracteres Unicode.**
|
|
|
|
Para obtener una lista completa de todos los tipos de datos incorporados, consulte [aquí](https://msdn.microsoft.com/en-us/library/ms228360)
|
|
|
|
[**Tipos de referencia**](https://msdn.microsoft.com/en-us/library/490f96s2.aspx) : las variables de los tipos de referencia almacenan referencias a sus objetos, lo que significa que almacenan la dirección en la ubicación de los datos en la [pila](http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#orgheadline2) , también conocidos como punteros. Los datos reales se almacenan en la memoria del [montón](http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html#orgheadline3) . La asignación de un tipo de referencia a otro no copia los datos, en su lugar crea la segunda copia de referencia que apunta a la misma ubicación en el montón.
|
|
|
|
En el montón, los objetos se asignan y se desasignan en orden aleatorio, por lo que esto requiere la sobrecarga de administración de memoria y [recolección de basura](https://msdn.microsoft.com/en-us/library/hh156531(v=vs.110) .aspx).
|
|
|
|
A menos que escriba [un código inseguro](https://msdn.microsoft.com/en-us/library/t2yzs44b.aspx) o trate con un [código no administrado (](https://msdn.microsoft.com/en-us/library/sd10k43k(v=vs.100) .aspx), no necesita preocuparse por la vida útil de sus ubicaciones de memoria. El compilador .NET y CLR se encargarán de esto, pero aún así es bueno tener esto en cuenta para optimizar el rendimiento de sus aplicaciones.
|
|
|
|
Mas informacion [aqui](http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx?ArticleID=9adb0e3c-b3f6-40b5-98b5-413b6d348b91)
|
|
|
|
## Declaraciones de control de flujo
|
|
|
|
* [Si otra cosa](https://msdn.microsoft.com/en-us/library/5011f09h.aspx) : [Editar en .NET Fiddle](https://dotnetfiddle.net/IFVB33)
|
|
|
|
```
|
|
int myScore = 700;
|
|
if (myScore == 700)
|
|
{
|
|
Console.WriteLine("I get printed on the console");
|
|
}
|
|
else if (myScore > 10)
|
|
{
|
|
Console.WriteLine("I don't");
|
|
}
|
|
else
|
|
{
|
|
Console.WriteLine("I also don't");
|
|
}
|
|
```
|
|
|
|
* [Cambiar](https://msdn.microsoft.com/en-GB/library/06tc147t.aspx) declaración: [Editar en .NET Fiddle](https://dotnetfiddle.net/lPZftO)
|
|
|
|
utilizando el sistema;
|
|
|
|
programa de clase publica { vacío estático público principal () { int myNumber = 0; interruptor (myNumber) { // Una sección de cambio puede tener más de una etiqueta de caso. caso 0: caso 1: { Console.WriteLine ("Caso 0 o 1"); descanso; }
|
|
|
|
```
|
|
// Most switch sections contain a jump statement, such as a break, goto, or return.;
|
|
case 2:
|
|
Console.WriteLine("Case 2");
|
|
break;
|
|
// 7 - 4 in the following line evaluates to 3.
|
|
case 7 - 4:
|
|
Console.WriteLine("Case 3");
|
|
break;
|
|
// If the value of myNumber is not 0, 1, 2, or 3 the
|
|
//default case is executed.*
|
|
default:
|
|
Console.WriteLine("Default case. This is also optional");
|
|
break; // could also throw new Exception() instead
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
}
|
|
|
|
* [Para](https://msdn.microsoft.com/en-us/library/ch45axte.aspx) & [Foreach](https://msdn.microsoft.com/en-gb/library/ttw7t8t6.aspx) : [Editar en .NET Fiddle](https://dotnetfiddle.net/edxtvq)
|
|
|
|
para (int i = 0; i <10; i ++) { Console.WriteLine (i); // imprime 0-9 }
|
|
|
|
Console.WriteLine (Environment.NewLine); para (int i = 0; i <= 10; i ++) { Console.WriteLine (i); // imprime 0-10 }
|
|
|
|
Console.WriteLine (Environment.NewLine); para (int i = 10 - 1; i> = 0; i--) // bucle de decremento { Console.WriteLine (i); // imprime 9-0 }
|
|
|
|
Console.WriteLine (Environment.NewLine); //para (; ; ) { // Todas las expresiones son opcionales. Esta declaración // crea un bucle infinito. \* //
|
|
}
|
|
|
|
* [While](https://msdn.microsoft.com/en-us/library/2aeyhxcd.aspx) & [do-while](https://msdn.microsoft.com/en-us/library/370s1zax.aspx) : [Editar en .NET Fiddle](https://dotnetfiddle.net/O5hOF1)
|
|
|
|
// Continuar el ciclo while hasta que el índice sea igual a 10. int i = 0; mientras (i <10) { Console.Write ("While statement"); Console.WriteLine (i); // Escriba el índice en la pantalla. i ++; // Incrementar la variable. }
|
|
|
|
número int = 0; // funciona primero, hasta que se cumpla la condición, es decir, termina cuando el número es 4. hacer { Console.WriteLine (número); // imprime el valor de 0-4 numero ++; // Añadir uno al número. } while (número <= 4); |