Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
highlevel:csharp:xtra [2008/12/28 10:21] alfred |
highlevel:csharp:xtra [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 229: | Línea 229: | ||
| ''.Extension'' nos dará la extensión del archivo. \\ | ''.Extension'' nos dará la extensión del archivo. \\ | ||
| Y ''Attributes'' sus atributos. \\ | Y ''Attributes'' sus atributos. \\ | ||
| + | |||
| + | |||
| ==== Flujos de datos ==== | ==== Flujos de datos ==== | ||
| Línea 311: | Línea 313: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| ===== El framework de .NET ===== | ===== El framework de .NET ===== | ||
| Línea 545: | Línea 551: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | |||
| ==== Threads ==== | ==== Threads ==== | ||
| Línea 595: | Línea 603: | ||
| } | } | ||
| } | } | ||
| + | </code> | ||
| + | Para hacer un ''lock'' en un método estático crearemos un objeto de la siguiente forma ''private static readonly object signalObject = null;'' y este será el que utilicemos. \\ | ||
| + | En las últimas versiones de C# podemos hacer: | ||
| + | <code csharp> | ||
| + | System.Threading.Thread thread1 = new System.Threading.Thread(delegate() | ||
| + | { | ||
| + | routes = AtmDataExpress.Route.getRoutesBySProvider(idOper); | ||
| + | }); | ||
| </code> | </code> | ||
| Línea 755: | Línea 771: | ||
| * Las estructuras no heredan de object, sino de ''ValueType''. | * Las estructuras no heredan de object, sino de ''ValueType''. | ||
| * No pueden heredar de otra cosa que no sea una interfaz. | * No pueden heredar de otra cosa que no sea una interfaz. | ||
| + | |||
| Línea 763: | Línea 780: | ||
| public static void Main() {...} | public static void Main() {...} | ||
| </code> | </code> | ||
| + | |||
| + | |||
| + | ==== Constructores que invocan a otros constructores ==== | ||
| + | |||
| + | Cuando una clase hereda de otra, al crear un objeto de esta se llama automáticamente al constructor por defecto de la clase que hereda, a no ser que le sea indicado otro constuctor de la clase base al que llamar. \\ | ||
| + | No sólo se pueden indicar constructores de la clase base, sino otro de la clase a la que ese constructor pertenece, aún así, siempre se llamará al de la clase base, aunque también se llame a otro de esa clase y luego al llamado. \\ | ||
| + | Siempre se llama al constructor de la clase base antes que al del objeto creado, luego llamará al otro indicado y finalmente al que se ha llamado para crear e objeto. | ||
| + | |||
| + | Para hacer estas indicaciones podemos hacer esto: | ||
| + | * Llama al constructor por defecto de la clase base (si su constructor con int no llama a otro), al suyo con int y luego al suyo por defecto. | ||
| + | <code csharp> | ||
| + | public Class1 () : this(12); | ||
| + | </code> | ||
| + | * Llama al constructor con string de la clase base y luego al por defecto de esta clase. | ||
| + | <code csharp> | ||
| + | public Class1() : base("a"); | ||
| + | </code> | ||
| + | * Llama al constructor con string de la clase base, pasandole la variable a, y luego al de esta, con la variable a también. | ||
| + | <code csharp> | ||
| + | public Class1(string a) : base (a) | ||
| + | </code> | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ==== Difencia entre new metodo y override método ==== | ||
| + | Cuando hacemos un override de un método lo sobreescribimos tanto en la clase base como en la actual, y por mucho que convirtamos el objeto en el que tenemos el override en un objeto del que hereda, el método al que se llama es al del override y para acceder al de la clase base lo podremos hacer desde esa clase indicando base.metodo, pero no desde fuera. Si en la clase base se llama al método virtual, el que tiene el override, desde un objeto heredado, se llamará al método sobreescrito. \\ \\ | ||
| + | Al sobreescribir con new únicamente lo hacemos en la clase heredada, luego, convirtiendo el objeto en un tipo de la clase de la que hereda podremos acceder al método de su clase base. | ||
| + | |||
| + | ==== General ==== | ||
| + | * La diferencia entre el int.Parse (string) y el System.Convert.ToInt32(string) es que en el primero si el estring es nulo lanza una excepción, y el segundo devuelve 0. | ||
| ===== Trucos del Visual Studio ===== | ===== Trucos del Visual Studio ===== | ||
| Línea 768: | Línea 816: | ||
| * Desde el modo diseño, para pasar al código podemos hacer F7. | * Desde el modo diseño, para pasar al código podemos hacer F7. | ||
| - | ===== Tools & APIs ===== | + | |
| - | * Herramienta para la generación de código: ''ndoc''. | + | |
| - | * Librería para el uso de ficheros .ini: ''nini'' | + | |