paint-brush
C#: De los fundamentos a las técnicas avanzadas: una hoja de referencia para principiantespor@ssukhpinder
3,454 lecturas
3,454 lecturas

C#: De los fundamentos a las técnicas avanzadas: una hoja de referencia para principiantes

por Sukhpinder Singh16m2024/03/24
Read on Terminal Reader

Demasiado Largo; Para Leer

La completa hoja de referencia de C# está diseñada para ayudar a los desarrolladores a dominar la sintaxis y los conceptos clave relacionados con la programación de C#.
featured image - C#: De los fundamentos a las técnicas avanzadas: una hoja de referencia para principiantes
Sukhpinder Singh HackerNoon profile picture
0-item
1-item
2-item

La completa hoja de referencia de C# está diseñada para ayudar a los desarrolladores a dominar la sintaxis y los conceptos clave relacionados con la programación de C#.

Contenido

  1. Estructura basica
  2. Tipos de datos
  3. variables
  4. Constantes
  5. Declaraciones condicionales
  6. Bucles
  7. matrices
  8. Liza
  9. Diccionarios
  10. Métodos
  11. Clases y objetos
  12. Manejo de excepciones
  13. Delegados, eventos y Lambdas
  14. LINQ (consulta integrada en lenguaje)
  15. Atributos
  16. Asíncrono/Espera
  17. Misceláneas
  18. Manipulación de cuerdas
  19. E/S de archivos
  20. Fecha y hora
  21. Genéricos
  22. Nullables
  23. Atributos y reflexión
  24. Métodos de extensión
  25. Inyección de dependencia
  26. Clases Parciales
  27. Interoperabilidad
  28. Tipos anónimos
  29. tuplas
  30. La coincidencia de patrones
  31. Funciones locales
  32. Registros
  33. con expresiones
  34. Indexadores y rangos
  35. utilizando la declaración
  36. Tipos de referencia que admiten valores NULL (NRT)
  37. Uso basado en patrones
  38. Patrones de propiedad
  39. Implementaciones de interfaz predeterminadas
  40. Enlace dinámico

1. Estructura básica

Todos los programas C# siguen una estructura fundamental, que se describe a continuación:

 using System; public class HelloWorld { public static void Main(string[] args) { Console.WriteLine("Hello, World!"); } }


A partir de .NET 5, las declaraciones de nivel superior simplifican el contenido de Program.cs:

 Console.WriteLine("Hello, World");

2. Tipos de datos

C# admite varios tipos de datos como:

  • Tipos de valores: int, char y float
  • Tipos de referencia: cadena, clase y matriz

3. Variables

Las variables son nombres simbólicos de valores:

 int age = 30; // integer variable string name = "John"; // string variable double PI = 3.14159; // double for floating-point numbers bool isLoggedIn = true; // boolean variable

Utilice 'var' para la inferencia de tipos:

 var number = 5; // compiler infers type as int var message = "This is a message"; // compiler infers type as string

4. Constantes

Las constantes tienen valores inmutables:

 const double GRAVITY = 9.81; // constant for gravitational acceleration const string COMPANY_NAME = "MyCompany"; // constant company name

5. Declaraciones condicionales

Controlar el flujo del programa según las condiciones:

 int age = 20; if (age >= 18) { Console.WriteLine("You are eligible to vote."); } else { Console.WriteLine("You are not eligible to vote."); } switch (variable) { /*...*/ } // Switch statement

6. Bucles

Ejecute el código repetidamente:

 for (int i = 1; i <= 5; i++) { Console.WriteLine(i); } foreach (var item in collection) { /*...*/ } // Foreach loop while (condition) { /*...*/ } // While loop do { /*...*/ } while (condition); // Do-while loop

7. matrices

Colecciones de elementos de tamaño fijo:

 string[] names = new string[3] { "Alice", "Bob", "Charlie" }; Console.WriteLine(names[1]); // Output: Bob (accessing element at index 1)

8. Listas

Colecciones dinámicas similares a matrices:

 List<int> numbers = new List<int>(); numbers.Add(1); numbers.Add(2); numbers.Add(3); foreach (var number in numbers) { Console.WriteLine(number); }

9. Diccionarios

Pares clave-valor para asociación de datos:

 Dictionary<string, string> phonebook = new Dictionary<string, string>(); phonebook.Add("John Doe", "123-456-7890"); phonebook.Add("Jane Doe", "987-654-3210"); Console.WriteLine(phonebook["John Doe"]); // Output: 123-456-7890

10. Métodos

Encapsular lógica reutilizable:

 public class Rectangle { public double Width { get; set; } public double Height { get; set; } public double GetArea() { return Width * Height; } } public class Program { public static void Main(string[] args) { Rectangle rect = new Rectangle(); rect.Width = 5; rect.Height = 10; double area = rect.GetArea(); Console.WriteLine($"Area of rectangle: {area}"); } }

11. Clases y objetos

Las clases definen planos para objetos:

 public class MyClass // Class definition { public string PropertyName { get; set; } // Properties store data public void MethodName() { /*...*/ } // Methods define actions } MyClass obj = new MyClass(); // Object creation

12. Manejo de excepciones

Administre los errores de tiempo de ejecución con elegancia:

 public static int GetNumberInput() { while (true) { try { Console.WriteLine("Enter a number: "); string input = Console.ReadLine(); return int.Parse(input); } catch (FormatException) { Console.WriteLine("Invalid input. Please enter a number."); } } } public static void Main(string[] args) { int number = GetNumberInput(); Console.WriteLine($"You entered: {number}"); }

13. Delegados, eventos y Lambda

Para programación basada en eventos y manejo de métodos:

 public delegate void MyDelegate(); // Delegate declaration event MyDelegate MyEvent; // Event declaration public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { List<Person> people = new List<Person>() { new Person { Name = "Alice", Age = 30 }, new Person { Name = "Bob", Age = 25 }, new Person { Name = "Charlie", Age = 40 }, }; people.Sort((p1, p2) => p1.Name.CompareTo(p2.Name)); foreach (var person in people) { Console.WriteLine(person.Name); // Output: Alice, Bob, Charlie (sorted by name) } }

14. LINQ (consulta integrada en lenguaje)

Capacidades de consulta para manipulación de datos:

 using System.Linq; public static void Main(string[] args) { List<int> numbers = new List<int>() { 1, 2, 3, 4, 5, 6 }; var evenNumbers = numbers.Where(x => x % 2 == 0); foreach (var number in evenNumbers) { Console.WriteLine(number); // Output: 2, 4, 6 } }

15. Atributos

Agregue metadatos a los elementos del código:

 [Obsolete("Use the new DoSomethingV2 method instead.")] public void DoSomething() { // Implementation here } public void DoSomethingV2() { // New and improved implementation }

16. Asíncrono/Espera

Para ejecución de código sin bloqueo:

 using System.Threading.Tasks; public static async Task DownloadFileAsync(string url, string filePath) { // Simulate downloading data asynchronously await Task.Delay(2000); // Simulate a 2-second download // Write downloaded data to the file File.WriteAllText(filePath, "Downloaded content"); Console.WriteLine($"File downloaded to: {filePath}"); } public static void Main(string[] args) { string url = "https://example.com/data.txt"; string filePath = "downloaded_data.txt"; DownloadFileAsync(url, filePath); // Continue program execution while download happens in the background Console.WriteLine("Downloading file..."); Console.WriteLine("Meanwhile, you can do other things..."); }

17. Varios

Funciones de idioma adicionales:

  • enumeración, interfaz, clase, registro y estructura


  • dinámico, es, como, var y nombre de

18. Manipulación de cuerdas

Potentes métodos de manejo de cuerdas:

 string.Concat(); // Combine strings string.Join(); // Join elements str.Split(); // Split string str.ToUpper(); // Convert to uppercase str.ToLower(); // Convert to lowercase

19. E/S de archivos

Operaciones con archivos:

 using System.IO; // Required for File I/O File.ReadAllText(path); // Read file content File.WriteAllText(path, content); // Write to file File.Exists(path); // Check file existence

20. Fecha y hora

Manipulación de fecha y hora:

 using System; public static void Main(string[] args) { DateTime startDate = DateTime.Parse("2024-03-10"); DateTime endDate = DateTime.Now; TimeSpan difference = endDate - startDate; Console.WriteLine($"Time difference: {difference.Days} days, {difference.Hours} hours"); }

21. Genéricos

Estructuras de datos con seguridad de tipos:

 public class Stack<T> { private List<T> items = new List<T>(); public void Push(T item) { items.Add(item); } public T Pop() { T item = items[items.Count - 1]; items.RemoveAt(items.Count - 1); return item; } } public static void Main(string[] args) { Stack<string> messages = new Stack<string>(); messages.Push("Hello"); messages.Push("World"); string message = messages.Pop(); Console.WriteLine(message); // Output: World }

22. Anulables

Permitir que los tipos de valores sean nulos:

 int? nullableInt = null; // Nullable integer

23. Atributos y reflexión

Metadatos e introspección de tipos:

 public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { Type personType = typeof(Person); PropertyInfo[] properties = personType.GetProperties(); foreach (PropertyInfo property in properties) { Console.WriteLine(property.Name); // Output: Name, Age } }

24. Métodos de extensión

Agregar métodos a tipos existentes:

 public static class StringExtensions { public static string ToUppercase(this string str) { return str.ToUpper(); } } public static void Main(string[] args) { string message = "Hello, world!"; string uppercased = message.ToUppercase(); // Using the extension method Console.WriteLine(uppercased); // Output: HELLO, WORLD! }

25. Inyección de dependencia

Diseño de código débilmente acoplado:

 public interface ILogger { void LogMessage(string message); } public class MyService { private readonly ILogger _logger; public MyService(ILogger logger) { _logger = logger; } public void DoSomething() { _logger.LogMessage("Doing something..."); } } // Implementing the ILogger interface (example) public class ConsoleLogger : ILogger { public void LogMessage(string message) { Console.WriteLine(message); } } public static void Main(string[] args) { ILogger logger = new ConsoleLogger(); MyService service = new MyService(logger); service.DoSomething(); }

26. Clases Parciales

Dividir una única definición de clase:

 public partial class MyClass { /*...*/ } // Partial class definition

27. Interoperabilidad

Interoperabilidad con otros idiomas:

 using System; using System.Runtime.InteropServices; [DllImport("user32.dll")] public static extern int MessageBox(IntPtr hWnd, string lpText, string lpCaption, uint uType); public static void Main(string[] args) { MessageBox(IntPtr.Zero, "Hello from C#!", "Interop Example", 0); }

28. Tipos anónimos

Creando tipos sin nombre:csharpCopiar código

 var person = new { Name = "John", Age = 30 }; Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

29. tupla

Estructuras de datos con un número específico de elementos:

 (string Name, int Age) person = ("Alice", 30); Console.WriteLine($"Name: {person.Name}, Age: {person.Age}"); // Accessing elements using Item1 and Item2

30. Coincidencia de patrones

Simplifica ciertas tareas de programación:

 object obj = new Person { Name = "Bob", Age = 25 }; if (obj is Person { Name: "Bob", Age >= 18 }) { Console.WriteLine("Bob is an adult."); }

31. Funciones locales

Encapsule la lógica dentro de los métodos:

 public static int Calculate(int number) { int Factorial(int n) { if (n == 0) return 1; return n * Factorial(n - 1); } return Factorial(number); } public static void Main(string[] args) { int result = Calculate(5); Console.WriteLine($"5! = {result}"); }

32. Registros

Sintaxis concisa para tipos de referencia:

 public record Person(string Name, int Age); public static void Main(string[] args) { Person person1 = new Person("Alice", 30); Person person2 = new Person("Alice", 30); // Records provide default equality comparison if (person1 == person2) { Console.WriteLine("People are equal"); } }

33. con expresiones

Mutación no destructiva para registros:

 var john = new Person("John", 30); var jane = john with { Name = "Jane" }; // Non-destructive mutation

34. Indexadores y rangos

Acceso flexible a los datos:

 int[] arr = {0, 1, 2, 3, 4, 5}; var subset = arr[1..^1]; // Indexer and range usage

35. usando la Declaración

Deseche los objetos desechables:

 using var reader = new StreamReader("file.txt"); // using declaration

36. Tipos de referencia que aceptan valores NULL (NRT)

Evite excepciones de referencia nula:

 public class Person { public string Name { get; set; } public int Age { get; set; } } public static void Main(string[] args) { Person person = new Person() { Age = 30 }; // NRTs require null checks before accessing properties if (person?.Name != null) { Console.WriteLine(person.Name); } else { Console.WriteLine("Name is null"); } }

37. Uso basado en patrones

Más patrones en la declaración de uso:

 public ref struct ResourceWrapper { /*...*/ } // Resource wrapper using var resource = new ResourceWrapper(); // Pattern-based using

38. Patrones de propiedad

Deconstruir objetos en coincidencia de patrones:

 if (obj is Person { Name: "John", Age: var age }) { /*...*/ } // Property pattern matching

39. Implementaciones de interfaz predeterminadas

Interfaces con implementaciones de métodos predeterminados:

 public interface IPerson { /*...*/ } // Interface with default method public class MyClass : IPerson { /*...*/ } // Class implementing interface

40. Enlace dinámico

Resolución de tipo de tiempo de ejecución:

 dynamic d = 5; // Dynamic binding d = "Hello"; // No compile-time type checking

Conclusión

Esta hoja de referencia estructurada de C# concluye con temas y técnicas avanzadas, proporcionando una referencia completa para los desarrolladores que buscan mejorar sus habilidades de programación en C#. Para obtener ejemplos detallados y una mayor exploración, consulte las secciones específicas descritas en esta guía. ¡Feliz codificación!

Programación C#🚀

¡Gracias por ser parte de la comunidad C#! Antes de que te vayas:

Si ha llegado hasta aquí, muestre su agradecimiento con una palmada y siga al autor. 👏️️

Síguenos: X | LinkedIn | Dev.to | Hashnodo | Boletín | tumblr

Visita nuestras otras plataformas: GitHub | Instagram | Tiktok | Quora | diario.dev

Inspirado por: https://zerotomastery.io/cheatsheets/csharp-cheat-sheet/#constants


También publicado aquí