Aprende a crear una solución .NET ordenada y profesional con C# paso a paso: desde el proyecto de consola hasta una clase Escuela bien diseñada con encapsulamiento, propiedades y constructor. Verás atajos útiles de Visual Studio Code, convenciones y pequeñas decisiones que hacen tu código más mantenible.
¿Cómo iniciar un proyecto .NET consola con Visual Studio Code?
Crear la base correcta facilita todo. Se parte de un folder y se verifica cada paso para evitar errores.
Crear carpeta etapa uno y abrir en VS Code.
Inicializar una app de consola con .NET.
Ejecutar para ver el Hola Mundo.
Mantener orden: carpeta Entidades para clases del dominio.
¿Qué comandos usar en la terminal?
dotnet new console
dotnet run
Verifica que “Hola Mundo” se ejecute bien.
Usa la terminal integrada de VS Code.
Cada instrucción en C# finaliza con punto y coma.
¿Qué es el encapsulamiento en C# y cómo usar propiedades?
La clase Escuela modela el dominio y protege sus datos. En lugar de exponer campos públicos, se usan propiedades con get y set. Así podrás agregar lógica sin romper otras partes del código.
¿Cómo se define una propiedad con get y set?
Un campo privado guarda el dato.
Una propiedad pública controla lectura y escritura.
Se aplican convenciones: campo en minúscula; propiedad en PascalCase.
namespaceCoreEscuela.Entidades{publicclassEscuela{// Campo privado (atributo).privatestring nombre;// Propiedad con lógica de negocio.publicstring Nombre
{get{return"copia "+ nombre;}// Antecede "copia ".set{ nombre =value.ToUpper();}// Fuerza mayúsculas.}// Propiedad autoimplementada (atajo get; set;).publicint AñoDeCreación {get;set;}// Otras propiedades del dominio.publicstring País {get;set;}// Ejemplo estilo propfull: propiedad con campo de respaldo.privatestring ciudad;publicstring Ciudad
{get{return ciudad;}set{ ciudad =value;}}}}
Conceptos clave: atributo/campo, propiedad, get, set, convención de nombres, shortcut de auto-propiedad.
Beneficio: puedes agregar validaciones, auditorías o transformaciones cuando leas/escribas.
¿Cómo crear auto-propiedades rápido con los atajos de VS Code?
Escribe prop y tabulador: crea tipo, nombre y { get; set; }.
Escribe propfull y tabulador: crea campo privado + propiedad completa.
Útiles para acelerar código repetitivo.
¿Cómo definir un constructor y asignar propiedades con tuplas?
El constructor obliga a crear objetos válidos desde el inicio. Puedes exigir parámetros mínimos, como nombre y año de creación.
¿Cómo funciona el constructor y la palabra clave this?
Si parámetro y campo se llaman igual, usa this para referirte al miembro de la clase.
Así evitas ambigüedad y asignas con claridad.
publicclassEscuela{privatestring nombre;publicstring Nombre
{get{return"copia "+ nombre;}set{ nombre =value.ToUpper();}}publicint AñoDeCreación {get;set;}publicstring País {get;set;}publicstring Ciudad {get;set;}// Constructor clásico.publicEscuela(string nombre,int año){this.Nombre = nombre;this.AñoDeCreación = año; País ="Colombia"; Ciudad ="Bogotá";}}
Ventaja: garantiza datos mínimos y consistentes.
Puedes asignar valores por defecto a otras propiedades.
¿Cómo usar asignación por tuplas en el constructor?
Versión corta: asigna varias propiedades en una sola línea.
var escuela =newEscuela("Platzi Academy",2012){ País ="Colombia", Ciudad ="Bogotá"};Console.WriteLine(escuela.Nombre);// Salida: "copia PLATZI ACADEMY"
¿Te quedó alguna duda sobre propiedades, get/set o constructores? Cuéntame en un comentario qué parte quieres practicar más o qué caso real de tu proyecto te gustaría modelar.
Excelente explicación.
Sería genial que otros cursos de Platzi fueran impartidos con la misma parsimonia y “puntualidad” con los temas, como lo ha hecho Juan Carlos Ruiz Pacheco con este curso.
Bien detallado en los objetivos puntuales.
Bien estructurado (no improvisado sobre la marcha, como otros cursos en Platzi).
Espero que así como están actualizando el curso de Python en esas fechas, otros cursos también sean actualizados.
A veces me siento estafado 😉
Pero bueno, reitero: este es un excelente referente sobre COMO DEBEN DE HACER TODOS SUS CURSOS (TODOS).
Totalmente de acuerdo compañero, ojala todos los cursos fueron impartidos de esta manera
Cuanta razón tienes
Mayús. + Alt + F = dar formato al documento (texto)
Ctrl + K + S = ver lista completa de atajos de teclado (lo compartió @danrmrz en una clase anterior)
regresé a esta clase solo para ver este atajo ;)
Gracias
Para quienes no les aparece los archivos de la solucion .vscode pueden presionar Ctrl + Shift + P y seleccionar la opción "Generate Assets for Build and Debug "
Me parece que va muy rápido hay partes como en el método constructor que no comprendo como la igualdad de las propiedades a los parámetros debería ser mas explicito y explicar el porque se asigna de esa manera.
Encapsular: Sirve para proteger el acceso directo a los datos.
Al usar el shortCut ctrl + punto no me aparecia el comando para seleccionar "using CoreEsceula.Entidades". Para solucionarlo fui a la sección de extensions y descargue C# Extensions, verifique que el nombre de la clase Escuela fuera correcto y volví a aplicar el mismo shortCut. Así es como funciono.
Actualización 2022: La extensión sale deprecada y la otra opción no muestra la función de using CoreEscuela.Entidades
No me funciona el shortcut.
Constructores: En pocas palabras, es una función que en C# debe tener el mismo nombre de la clase a la que pertenece (en otros lenguajes se hace con palabras reservadas), y este, se ejecuta automáticamente al momento de crear un nuevo objeto a partir de la clase a la que pertenece.
Cuando digo "Crear un nuevo objeto", se puede entender a crear una nueva "instancia" de dicha clase.
Generalmente se ocupa, para asignar valores a otras propiedades la misma clase, como es en este caso, en donde asignamos los valores a las propiedades, directamente por el constructor.
Este es un excelente referente sobre COMO DEBEN DE HACER TODOS SUS CURSOS (TODOS). @Platzerito26032019
en cuanto a los nombres deberian colocar un standar camalCase o PascalCase teniendo en cuenta la buena practica de la programación
PascalCase => clases
camelCase => metodos y atributos
correcto yo también aplico ese Standard, ademas los atributos privados los inicio con _; por ejemplo: private string _nombre;
Les dejo un link a las convenciones para C# de acuerdo con la comunidad de Github.
C# Coding Standards and Naming Conventions
Encapsulamiento:
Es hacer que los datos sean inviolables e inalterables , cuando se le asigne un Modificador de Acceso.
Modificadores de Acceso:
Public: Todas las clases pueden acceder al atributo
Protected: Sólo las clases,los paquetes y subclases pueden acceder al atributo
Default: Las clases y los paquetes de la clase pueden acceder al atributo
Private: Solo la clase puede acceder al atributo
**Imporante: **
Dejar que un atributo sea de acceso público por si solo dentro de una clase no es buena práctica, para ello se debe crear una manera intermedia para acceder a el, estos se conocen dentro de POO como métodos get -set , en C# se les llama propiedades.
Si no lo tienen claro, pueden ir al Curso de Programación Orientada a Objetos: POO
Encapsulamiento significa que no podes acceder directamente a las variables. No que son inviolables o inalterables.
@Martin Ezequiel Cabello
Yo llevaria el concepto mas alla, no es solo ocultar variables sino comportamiento.
Por ejemplo, tienes una clase S3FileReader No quieres exponer detalles como. "listBucket" "GetCredentials", pero si quieres "uploadFile" "readFile".
Muy bien explicado el constructor y la referencia .this.
Muy buena clase!
Utilice el signo ? para declarar las variables como nulas, ya que el compilador se alertaba.
using System;
namespace CoreEscuela
{
classEscuela{public string? nombre;public string? direccion;public int? anoFundacion;publicvoidTimbrar(){Console.Beep(2000,3000);//Si}}classprogram{staticvoidMain(string[] args){var miEscuela =newEscuela(); miEscuela.nombre="Faja de oro"; miEscuela.direccion="Prados del Rosario No 12."; miEscuela.anoFundacion=2000;Console.WriteLine("Timbrar..."); miEscuela.Timbrar();//Console.WriteLine("Hola Mundo...");}}
}
Esta bien este curso, estoy entendiendo a sin problemas.
x2
al fin entendí los constructores, muchas gracias Crack
namespace CoreEscuela.Entidades{classEscuela{ string nombre;/*Encapsulamiento - poder modificar sin tener que cambiar nada y se usa para dar más seguridad en tus aplicaciones
, para evitar que la información se filtre y para dar mucho más orden en las clases*/public string Nombre/*Nos mostrara el nombre de una manera publica */{ get{return"copia "+nombre;}/*Cuando alguien pregunte por el Nombre retornamos el campo nombre*/ set { nombre = value;}/*Cuando alguien le quiera asignar valor, se la asignamos a este campo con "Value"
y con ToUpper ese valor lo convertimos en mayuscula*/}public int AñoDeCreacion{get;set;}/*Opcion menos compleja de encapsulamiento,
aqui se encarga de crear la logica del ejemplo Nombre*/public string Ciudad{ get; set;}/*Con el atajo "prob" te genera automaticamente el metodo*/public string Pais{ get; set;}private int myVar { get; set;}/*Constructor es un método especial de una clase que se llama automáticamente siempre que se declara un objeto
de esa clase. Su función es inicializar el objeto y sirve para asegurarnos que los objetos siempre
contengan valores válidos*/publicEscuela(string nombre,int año){this.nombre= nombre;/*This, hace referencia al nombre de la variable dentro del mismo metodo*/AñoDeCreacion = año;/*Se hace con diferentes variables, dentro de la propiedad */}/*
Constructor de una manera mas corta por igualacion de tuplas, una Tupla es una estructura de datos que
nos permite almacenar hasta 8 valores diferentes, de diferentes tipos, que están relacionados de algún
modo y usando una sola variable.
public Escuela(string nombrea,int año) => (Nombre, AñoDeCreacion) = (nombre, año);
*/}}```
He realizado varios cursos de diferentes escuela buscando que me puede llegar a gustar para dedicarme de lleno y este profesor me hizo enamorarme de C# y ya tengo bien claro que quiero estudiar
No sé realmente bien por qué, pero yo, que intenté poner cada variable según lo que el usuario haya indicado, al poner a leer mi consola me marcaba como valor nulo. Tardé todo un día en descubrir que si añado un más y unas comillas sin espacio al método de escritura este me permite evitar esto.
Así,
string name =Console.ReadLine()+"";
Ahora, no sé si esto sea una buena práctica o es la manera de enmendar un error que en esencia no debió existir porque fue el resultado de una mala práctica mía. En todo caso quedo atento a tus comentarios y/o sugerencias para nunca parar de aprender, platzinautas.
Quien mas noto que el profesor dejo suelta una variable llamada MyVar que jamaz uso.
Cosas que pasan todo el tiempo. Variables, funciones y hasta clases
cuando borro shortcut de PropFull le quedo la variable alli