[C#] Hilo general

SupermaN_CK

¿QUÉ ES C#?

C# (pronunciado "si sharp" en inglés) es un lenguaje de programación moderno, basado en objetos y con seguridad de tipos. C# tiene sus raíces en la familia de lenguajes C, y a los programadores de C, C++, Java y JavaScript les resultará familiar inmediatamente.

CARACTERÍSTICAS PRINCIPALES

  • SINTAXIS SENCILLA. La sintaxis de C# es muy similar a Java, lo que simplifica al desarrollador a la hora de escribir código.
    Escritura. En C# tienes que declarar los tipos de datos con las variables, además que estas variables no pueden ser globales. De esta manera se reducen los errores de compilación. Además, es un lenguaje orientado a objetos, así que obliga que todos los métodos y propiedades estén dentro de una clase.
  • ORIENTACIÓN A COMPONENTES. Además de ser orientado a objetos, como hemos dicho antes, es orientado a componentes. Podemos definir propiedades sin necesidad de crear métodos, como en Java, o usar eventos sin tratar con punteros a funciones. Escribir código en C# es mucho más sencillo y potente que en otros lenguajes de programación.
  • SISTEMA DE TIPOS UNIFICADO. Todos los tipos de datos sencillos de C# derivan de una clase común llamada System.Object. De esta manera, la conversión de tipos sólo es compatible entre los tipos más cercanos (números enteros con decimales, por ejemplo), además de facilitar la creación de colecciones.
  • CLR (Common Language Runtime). Es el núcleo de .NET, el motor que ejecuta las aplicaciones programadas en C#, lo que ayuda a la integración del sistema operativo o dlls externas.
    Espacio de nombres. Puedes agrupar o aislar código mediante namespaces, parecido al package de Java.
  • POLIMORFISMO. En C++ se permite la herencia múltiple, pero en C# no, aunque puedes implementar interfaces. De esta manera se evitan complicaciones y simplifica la escritura.
  • OPERADORES SOBREESCRITOS. En C# puedes recodificar un operador, como puede ser el sumatorio + o el incremento ++.
  • Bibliotecas. Cualquier compilador de C# viene con un mínimo de biblioteca de clases disponibles y que puedes usar.
  • MULTIPLATAFORMA. Actualmente, el lenguaje C# es de código abierto y se ha utilizado en otros IDEs, como el proyecto Mono o Xamarin, y en múltiples sistemas operativos, como puede ser OSx o Android.
  • MULTIHILO. Puedes dividir tu código en múltiples hilos de ejecución, trabajar en paralelo y sincronizándose al final.

Fuente

¿CÓMO UTILIZAR C#?

Microsoft pone al alcance, de toda la comunidad planetaria de programadores, sus plataformas de desarrollo, como Visual Studio Code, de licencia gratuita (Freeware: no pagas por utilizarla), multiplataforma (para Windows, Linux y Mac OS), bajo el entorno .NET Core; y también Visual Studio (de pago), en sus versiones de 2017/2019, para Windows y Mac OS, bajo el entorno de .NET Framework. La diferencia entre ambos entornos es el destinatario final de las aplicaciones, siendo el último solo para Windows, mientras que el primero para las 3 plataformas mencionadas.

Para trabajar con C# es recomendable utilizar Microsoft Visual Studio, ya que ha sido desarrollado especialmente para ello y soporta la carga y trabajo con su mismo lenguaje.

Fuente

Página de descarga oficial de Visual Studio

También puedes usar Visual Studio Code, va por gustos.

Página de descarga oficial de Visual Studio Code

ASP.NET

.NET es una plataforma de desarrollo compuesta por herramientas, lenguajes de programación y bibliotecas para construir diferentes tipos de aplicaciones.

Estas son algunas de las cosas que ASP.NET añade a la plataforma .NET:

  • Marco básico para procesar las solicitudes en la web en C# o F#
  • Sintaxis de plantillas de páginas web, conocida como Razor, para construir páginas web dinámicas usando C#
  • Bibliotecas para patrones de web comunes, como el Model View Controller (MVC)
  • Sistema de autenticación que incluye bibliotecas, una base de datos y páginas de plantillas para manejar los inicios de sesión, incluyendo autenticación multifactorial y autenticación externa con Google, Twitter y más.
  • Extensiones del editor para proporcionar resaltado de sintaxis, finalización de código y otras funcionalidades específicas para el desarrollo de páginas web

Página oficial ASP.NET

RECURSOS

Documentación oficial de Microsoft
C# Tutorial - Full Course for Beginners (vídeo de 4 horas)
Curso de C# para principiantes
Curso de C# (pildorasinformaticas)
C# Programming Language (tutorial)
C# Programming Yellow Book (para empezar)
C# in Depth (para cuando te leas Yellow Book)
https://projecteuler.net/ (para practicar)
https://www.hackerrank.com/ (para practicar)
https://www.codewars.com/ (para practicar)

CONSEJOS DE @r2d2rigo

  • No uses videotutoriales para aprender.
  • No uses cursos/blogs/webs random.
  • Sobre todo NO uses W3Schools.
  • Los puntos anteriores vienen de que suelen ser recursos de calidad discutible en la mayoría de los casos. Te pueden valer para introducirte y que te pique el gusanillo, pero a la larga es mucho mejor usar los recursos creados por la propia MS, como el primer link que has puesto o https://channel9.msdn.com/
  • Piérdele el miedo al inglés y acostúmbrate a usarlo como primer lenguaje para todo lo técnico.

Iré añadiendo recursos y lo que veáis que pueda ser útil o necesario con vuestra ayuda.

20
S

Este curso es muy corto pero muy conciso y muy bien explicado:

https://openwebinars.net/cursos/c-principiantes/

5
B

.

r2d2rigo

Alguien hace por fin un hilo de C# y esta lleno de copypastes y datos erroneos.

Anda #1 curratelo un poco mas, majo.

1 1 respuesta
SupermaN_CK

@Zoko por cosas como #4 era por lo que prefería no abrirlo (si es que no fallo), ya tenía que venir el típico que lleva 20 años en MV y encima viene con aires de subidito, 4 comentarios ni más ni menos xd.

#4 Llevo 1 mes y pico desde que empecé con la programación y este lenguaje en particular, ya que se ve que eres un total experto en la materia te agradecería que me abras los ojos y me digas qué está mal para poder quitarlo y que nos muestres tus conocimientos, estaré encantado de poner en #1 todo lo que sea útil y necesario como ya comenté.

PD: Que tenga que venir un novato en esto para que se hiciera un hilo así dice mucho de gente como tú, que por cierto, es gratis abrir hilos.

12 2 respuestas
kidandcat

quita esto:

"INTEGRACIÓN CON OTROS LENGUAJES. Cualquier lenguaje que se compile con .NET, como la nueva versión de visual basic, puede aprovecharse para usar en tu proyecto.
MEJORA EN LA GESTIÓN DE MEMORIA. Al igual que Java, en C# dispone de un recolector de basura que destruye los objetos que no se usan en memoria.
TRATAMIENTO DE ERRORES. Cualquier lenguaje de programacion moderno utiliza las excepciones para controlar los posibles errores en el código."

Y tampoco entiendo por que has puesto Unity ahi, hay muchos motores de videojuegos que se pueden programar con C#, para hacer publicidad de Unity ya tienes su hilo.

"y también Visual Studio (de pago)" Visual Studio tiene la version Community que no es de pago.

"Para trabajar con C# es recomendable utilizar Microsoft Visual Studio, ya que ha sido desarrollado especialmente para ello y soporta la carga y trabajo con su mismo lenguaje." tampoco es verdad, a lo mejor para .NET Framework vale, quizás xamarin para no liarte, nada más, vscode es mil veces mas rápido y liviano, y si tu target es .NET core desde mi punto de vista es más recomendable.

Mola la iniciativa, yo le estoy dando ahora y la verdad no me decepciona (aunque es gracias a NET core y el poder programar facilmente con VScode, no gracias a Visual Studio)

2 2 respuestas
SupermaN_CK

#6 Gracias por el aporte, quitado. Lo de Unity es porque casi siempre que he leído en MV o en otras partes hablar de Unity, C# estaba siempre en las conversaciones pero si veis que sobra lo quito sin problemas.

1 1 respuesta
kidandcat

#7 Mejor, que aquí hay rivalidad de motores, y Godot también se usa con C# :P

PD: me quedo por aqui permanentemente, yo curro en desarrollo web, asi que si alguien le da a blazor que avise y compartimos experiencias. Por otro lado tambien le estamos dando algunos a godot con C#.

1 2 respuestas
r2d2rigo

#5 la mayoria de cosas ya te las ha dicho #6, pero hincapie en:

En C# tienes que declarar los tipos de datos con las variables,

Parcialmente cierto, puedes usar var para que el compilador infiera el tipo aunque resta legibilidad al codigo.

Todos los tipos de datos sencillos de C# derivan de una clase común llamada System.Object.

Esto no es tan sencillo como da a entender. Los tipos primitivos (int, bool, float, etc) y estructuras derivan de System.Object a traves de System.ValueType, pero se comportan de una manera completamente distinta (residen en la stack/pila en lugar del heap/monticulo, su asignacion cambia el valor en lugar de "apuntar" al objecto, etc). Hay bastantes peque;os detalles detras de todo el sistema de tipado de C# y .NET en general.

ELIMINACIÓN DE LOS PROBLEMAS DE DLLs. Aunque puedes crear dlls en .NET, no te encuentras con la problemática de la sustitución de versiones antiguas de dlls compartidas con versiones nuevas. Pueden existir diferentes versiones de la misma dll, simplificando la instalación del softwasre.

No se ni por donde empezar aqui. Solo dire que se recomienda distribuir un ejecutable junto con todas sus dependencias para evitar el jaleo de que cargue una version incorrecta, y este es el menor de los problemas que te va a dar.

MULTIPLATAFORMA. Actualmente, el lenguaje C# es de código abierto y se ha utilizado en otros IDEs, como el proyecto Mono o Xamarin

Mono no es un IDE, es una implementacion open source alternativa de .NET Framework. Mas de lo mismo con Xamarin, es un conjunto de herramientas y librerias para programar para Android e iOS. Correcto que C# funciona hasta en tostadoras con el runtime adecuado.

como Visual Studio Code, de licencia gratuita (Freeware: no pagas por utilizarla),

Si nos ponemos muy tiquismiquis, VSCode es freeware porque es open source, tambien tienes acceso al codigo fuente para modificar y distribuir a tu antojo.

y también Visual Studio (de pago)

Visual Studio tiene la version Community que es gratuita para desarrolladores individuales y empresas peque;as.

en sus versiones de 2017/2019, para Windows y Mac OS

Visual Studio for Mac no tiene nada que ver con Visual Studio, es una version modificada de MonoDevelop enfocada al desarrollo con .NET Core y Xamarin.

La diferencia entre ambos entornos es el destinatario final de las aplicaciones, siendo el último solo para Windows, mientras que el primero para las 3 plataformas mencionadas.

.NET Framework tambien funciona en macOS y Linux a traves de Mono.

Ahora los consejos del dia:

  • No uses videotutoriales para aprender.
  • No uses cursos/blogs/webs random.
  • Sobre todo NO uses W3Schools.
  • Los puntos anteriores vienen de que suelen ser recursos de calidad discutible en la mayoria de los casos. Te pueden valer para introducirte y que te pique el gusanillo, pero a la larga es mucho mejor usar los recursos creados por la propia MS, como el primer link que has puesto o https://channel9.msdn.com/
  • Pierdele el miedo al ingles y acostumbrate a usarlo como primer lenguaje para todo lo tecnico.
  • En cuanto tengas un poco de soltura con la sintaxis, practica haciendo problemas predefinidos en webs como https://projecteuler.net/ , https://www.hackerrank.com/ o https://www.codewars.com/

#8 quiero querer a Blazor pero no me termina de convencer. Como alguien que odia el frontend web me parece un avance grande, pero Blazor WASM, que es lo que me interesa, esta muy verde aun.

PD: como no todo va a ser negatividad, cuenta con un residente mas para el hilo.

8 5 respuestas
SupermaN_CK

#9 Welcome y gracias por el post!

Pd: salvo lo de pildorasinformaticas suelo ver todo en inglés y también recomiendo a todo el mundo que haga lo mismo.

Zoko

#5

Bueno, en MV puedes encontrarte de todo, no te desanimes por esto. Parece que luego se ha redimido un poco en #9 , que a lo mejor no iba tan a malas.

On topic: Yo nunca he probado C# pero si que es verdad que me hablan muy bien de él, echaré un ojo por aquí!

4
zYctest

#8
yo trabajo con WPF y Web en aspx y desde hace un tiempecillo nos hemos mudado a blazor y estamos sacando bastantes proyectos con blazor en la empresa

1 1 respuesta
Zerokkk

Ya tenía que aparecer el pesado de @r2d2rigo con ínfulas de superioridad a tirarle abajo al pobre #1 su intento por hacer un hilo del lenguaje. Macho, en serio, si vas a hacer una puta crítica, hazla constructivamente y desde el buen rollo. Menos mal que en #9 has cambiado el tono, pero te digo de verdad que deberías hacerte ver estos prontos que te dan a veces en este foro. No es normal.

Las formas importan, no me cansaré de repetirlo.

PD: #1 por supuesto hay cosas que mejorar aquí, pero está genial el hilo y la intención! Keep it up.

5 1 respuesta
r2d2rigo

#13 a diferencia de ti, que vienes al hilo sin siquiera aportar. Si hay algo que me repatea es la cantidad de recursos tecnicos de mierda que hay en internet, normalmente escritos por juntaletras a los que solo les interesa ganar clicks en su blog apestoso infectado de ads, y la mala suerte ha sido que inicialmente #1 tenia mucha informacion erronea o contraproducente sacada de sitios asi. Dicho esto yo pienso quedarme por aqui y responder todas las dudas y echar las manos que pueda porque C# me encanta. Si quieres peleita nos vamos a fedadev, que ya sabes donde esta.

#12 que tipo de proyectos estais haciendo en Blazor? Migracion de herramientas internas o cosas que vendeis a clientes? No creeis que quiza aun es un poco temprano para apostar tanto en el framework? Yo hice 2 o 3 cosas casi triviales con Blazor WASM para charlas internas donde curro y justo me pillo la transicion de 3.1 a 3.2, con lo que varias librerias que queria usar estaban rotas :/

1 respuesta
Traber

La verdad es que con .NET Core por bandera, C# se ha convertido en un lenguaje más que interesante, en mi empresa lo estoy usando para construir lo que podría ser la segunda generación del principal software que nos da de comer, y es una gozada.

Es que vale para todo:

  • Juegos: Unity
  • Apps móvil: Xamarin
  • Servicios multiplataforma: .NET Core
  • Aplicación tradicional: .NET Framework

Eso sí, decir que en los 3-4 años que llevo yo programando C# no he seguido ningún curso para aprender, la curva de aprendizaje es bastante amable.

2 2 respuestas
zYctest

#14 Todas las herramientas internas nuevas las estamos haciendo con ello y hemos hecho ya 2 para clientes gordos, pero han sido testeadas muy bien para evitar problemas porque sabiamos que blazor no tiene mucha rodadura.

Ademas paralelamente estamos haciendo al igual que #15 migrar una de las partes del principal software de la empresa a blazor, las necesidades del mismo nos obligaban a utilizar tecnologias SPA sin recargas y fluidas y no dominabamos ninguna y aprender blazor nos resulto muy sencillo. De esto hace casi 1 año y tampoco nos ha sido dificil actualizar las versiones pero vamos con cuidado y solo usamos una libreria externa de componentes.

El mayor problema que hemos tenido y que lo vi antes del lanzamiento de una de las herramientas que lanzamos para un cliente fue la memoria, este cliente usaba mucha carga de datos en la aplicacion web y la memoria del servidor nunca paraba de crecer ( lo podeis ver en el modo debug del visual studio cargando un array cada vez que dais a un boton por ejemplo, aunque a nuestro cliente era por datos de archivos concretamente ) investigando comentaban que el "recolector de basura" no se ejecutaba hasta que lo creía necesario, de momento no hemos tenido problemas con ello pero si que me parece que no esta bien optimizado ese punto.

Edito:

1 respuesta
r2d2rigo

#15 los cursos estan orientados a gente que no tiene ni idea de programacion o conceptos concretos como tipado, herencia, etc, una vez coges soltura con el lenguaje con ir mirandote las specs de cada revision del lenguaje casi que te sobra. Es una autentica locura la cantidad de cosas que estan metiendo y yo aun sigo usando C# 7 con alguna cosilla de 8 como los nullable reference types, casi que me cuesta ponerme al dia.

#16 te puedo asegurar que el GC se ejecuta religiosamente (no es determinista y sus criterios de ejecucion cambian al vuelo, pero lo hace a intervalos durante la ejecucion https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals#conditions-for-a-garbage-collection ), seguramente tengais un problema de referencias que no se liberan (suscripciones a eventos quiza?) o incluso de memoria unmanaged (IDisposable no implementado, destructor/finalizer mal hecho, etc). Lo mas sencillo para diagnosticar es forzar un GC.Collect y si no hay diferencia es que no puede hacer su trabajo, toca sacar memory snapshots y ver donde se esta comiendo la RAM.

EDIT: en efecto, en tu GIF el GC se esta ejecutando (el marcador amarillo indica una ejecucion) PERO no esta encontrando nada para liberar, bien porque sigue habiendo referencias a la memoria o porque la lifetime/generacion de los objetos no se adecua a los criterios de la recoleccion.

1 respuesta
zYctest

#17 Lo miramos todo, implementamos IDisposable, forzamos GC.Collect pero nada. En su día busque en github y mencionaron que el recolector solo se ejecuta si es necesario y que no era necesario un GC Collect y efectivamente, lo termina haciendo cuando crece mucho pero mientras tanto puede llegar a 2Gb de memoria perfectamente. Incluso con el ejemplo que te crea la plantilla de blazor tambien aumenta la ram al darle al boton hasta el infinito, muy lento pero lo hace.

Edito:

Efectivamente, creo que la cosa esta en el lifetime, creo que lo deja más tiempo del que deberia y eso con miles de usuarios y muchos datos me parece que daría problemas. De todos modos me queda mucho por aprender de blazor pero sin duda me parece una herramienta potentisima y que en la empresa en la que trabajo nos ha salvado la vida.

1 respuesta
bLaKnI

#18 Blazor! Interesantisimo.
Es casi como un "Visual Basic Web" no? Totalmente por eventos?

1 respuesta
HeXaN

Para los que os gusta más aprender con libros (para mí es la mejor forma) os dejo el mítico "Yellow Book": http://www.csharpcourse.com/

Y cuando lo terminéis os ponéis con este: https://csharpindepth.com/

8 2 respuestas
Soltrac

#9 no creo que esté tan verde....

Va muchísimo más rápido que en las preview. Yo ya he montado un par de cosas y muy contento.

Y hablo del wasm. El modo servidor es una gilipollez.

A mí es q personalmente me encanta. Hice en su día un post de blazor y murió. La gente no entendió su magia xdddd.

#19 definirlo así hace llorar al niño Jesús

ZiZoU

#20 Impresionante libro.

Me quería meter con C# ya que el año que viene en el ciclo de automatización y robotica que estoy haciendo se va a tocar y ya me has dado lectura para estos meses.

Gracias.

1 respuesta
covaga

#22 pues si le metes C# a Eplan te quedarias flipando.
Yo cuando hice el curso, nos enseñaron VBA no C#.

1 respuesta
B
#23covaga:

pues si le metes C# a Eplan te quedarias flipando.

cuentanosmas.jpg

1 respuesta
Ugrek

#20 siempre he tenido la duda, ¿qué ventajas tiene aprender con libros en lugar de vídeos o cursos online?

3 respuestas
Wei-Yu

#25 las que a ti a título personal te de, ninguna más.

Yo por norma general paso mucho de libros, sobre todo si son técnicos a nivel bajo del palo "haz $pirula con $lenguaje" o "$lenguaje: lo bueno y lo malo".

El último que me miré fue uno sobre linq y expression trees pero lo usé como referencia para un par de cosas y ya; me leí por encima 2-3 capítulos y el resto eran paja.

Alvurion

Interesante hilo @SupermaN_CK , gracias por atreverte a abrirlo. Me lo añado a favoritos.

Yo cuando comencé a currar, empecé desarrollando una serie de aplicaciones en VBA. Tras poco más de un año, realizando una aplicación concreta nos dimos cuenta que ya no daba más de sí. Cero soporte y muchas cosas desactualizadas, así que me decanté por comenzar a programar en C#.

La verdad que me ha ido bastante bien. En estos dos años en los que he estado desarrollando apps con WPF he aprendido muchísimo y ahora voy bastante suelto. La curva de aprendizaje es bastante buena, asimilas los conceptos muy rápidamente. (También he de decir que partía de conocer un poco Java, pero aun así no es tan dificil si se empieza de cero).

A los que vengan al hilo de casualidad o simplemente estén empezando o apunto de hacerlo, les animo a empezar.

PD: Ya que lo habéis comentado, no conocía Blazor, y la verdad que me interesa para una serie de proyectos que podemos llevar a cabo en la empresa. Le echaré un vistazo cuando saque un poco de tiempo.

1
covaga

#24 el script que mas me gusta es el de numersr automaticamente los hilos, te olvodas totalmente ya que a medida vas haciendo, se van añadiendo, numerando, poniendo el diametro... etc Imagina jacerntodp esto con proyectos de +1000 paginas

Otro tema es el eec one con vba, te general el esquema eléctrico con un click.

La integración de C# en Eplan es muy buena.

1
HeXaN

#25 Los buenos libros, por norma general, profundizan bastante más en todos los temas y muchas veces ofrecen explicaciones "teóricas". Los cursos es muy raro que hagan esto. Me gusta más lo primero.

4
-Hell-

Que bien! #1

Me quedo por aqui en modo esponja. Segun vaya avanzando ire pasando de espectador a participante:muscle: .

1