Herramientas de usuario

Herramientas del sitio


highlevel:csharp:xtra

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
highlevel:csharp:xtra [2008/12/27 11:52]
alfred
highlevel:csharp:xtra [2020/05/09 09:25] (actual)
Línea 99: Línea 99:
  
 ===== General ===== ===== General =====
 +
  
 ==== Fechas ==== ==== Fechas ====
Línea 106: Línea 107:
   * ''​Date'',​ ''​Day'',​ ''​Hour'',​ ''​DayOfWeek'',​ ''​DayOfYear'',​ ''​Month'',​ ''​Second'',​ ''​Millisecond''​… Son propiedades que nos devuelven en números enteros el día, la hora…   * ''​Date'',​ ''​Day'',​ ''​Hour'',​ ''​DayOfWeek'',​ ''​DayOfYear'',​ ''​Month'',​ ''​Second'',​ ''​Millisecond''​… Son propiedades que nos devuelven en números enteros el día, la hora…
   * El método ''​Now''​ nos devolverá el día y la hora actual en el PC. O Today la fecha actual.   * El método ''​Now''​ nos devolverá el día y la hora actual en el PC. O Today la fecha actual.
 +
 +=== TimeSpan ===
 +El TimeSpan es otra forma de representar el tiempo. Tiene varios constructores,​ el más completo es al que se le pasa cinco parámetros enteros. El primero representa los días, el segundo las horas, tercero minutos, cuarto segundos y quinto milisegundos. Un objeto:
 +<code csharp>
 +TimeSpan delay = new TimeSpan(0,​0,​0,​10,​0);​
 +</​code>​
 +Contendría 10 segundos. Luego podríamos manipularlo de forma muy fácil.
  
 ==== Escribir XML ==== ==== Escribir XML ====
Línea 221: 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 ====
 Al guardar sólo bytes en el archivo debemos llamar al método ''​Write''​ del ''​FileStream'',​ éste espera un array de bytes que será lo que meta en el fichero y dos parámetros más, en qué posición del array empezará a meter datos y hasta qué posición. Al guardar sólo bytes en el archivo debemos llamar al método ''​Write''​ del ''​FileStream'',​ éste espera un array de bytes que será lo que meta en el fichero y dos parámetros más, en qué posición del array empezará a meter datos y hasta qué posición.
Línea 284: Línea 295:
 # endregion # endregion
 </​code>​ </​code>​
 +Ejemplo de la clase StreamWriter:​
 +<code csharp>
 +StreamWriter writer = File.CreateText(this.txtHDDir.Text);​
 +if (this.txtSince.Text != ""​)
 + iDesde = System.Int32.Parse(this.txtSince.Text);​
 +else
 + iDesde = 0;
 +if (this.txtTo.Text != ""​)
 + iHasta = System.Int32.Parse(this.txtTo.Text);​
 +else
 + iHasta = 0;
 +for (int i = iDesde; i <​=iHasta;​ i++) {
 + strDirTotal = this.txtIniDir.Text + i.ToString() + this.txtExt.Text;​
 + foreach (char chrTemp in strDirTotal)
 + writer.Write(chrTemp);​
 + writer.Write(writer.NewLine);​
 +}
 +</​code>​
 +
 +
 +
 +
  
 ===== El framework de .NET ===== ===== El framework de .NET =====
Línea 518: Línea 551:
 } }
 </​code>​ </​code>​
 +
 +
  
 ==== Threads ==== ==== Threads ====
Línea 568: 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 658: Línea 701:
 ds.ReadXml(fs);​ ds.ReadXml(fs);​
 </​code>​ </​code>​
 +
  
 ==== Servicios COM+ ==== ==== Servicios COM+ ====
Línea 700: Línea 744:
   * **AutoComplete** No pide parámetros y se aplica a los métodos de la clase COM+, la llamada a los metodos marcados como AutoComplete se ha de hacer seguida de .SetComplete().   * **AutoComplete** No pide parámetros y se aplica a los métodos de la clase COM+, la llamada a los metodos marcados como AutoComplete se ha de hacer seguida de .SetComplete().
   * **JustInTimeActivation** Habilita o deshabilita la activación JIT, se debe de aplicar a nivel de clase.   * **JustInTimeActivation** Habilita o deshabilita la activación JIT, se debe de aplicar a nivel de clase.
 +
 +
 +
 +==== System.Management ====
 +Desde este espacio de nombres podemos usar el Windows Management (WMI). Esto nos sirve para usar un lenguaje parecido al SQL (WQL) para acceder a las clases del sistema operativo (en la SDK: Operating System Classes o Computer System Hardware Classes), lo que nos proporciona una información muy importante del sistema. \\ \\ 
 +
 +Para acceder a esta tenemos disponibles varios objetos, los ManagementObject. Un ManagementObject es una especie de array de lo que devuelve una consulta WQL. Por ejemplo, en una consulta a Win32_LogicalDisk se devolverá un objeto ManagementObject con las propiedades de esta clase, es decir, nombre (string), size (long), status (string)…. ​ \\ 
 +Órdenes WQL válidas pueden ser:
 +<​code>​
 +Select * from Win32_LogicalDisk
 +Select FreeSpace,​Size,​Name from Win32_LogicalDisk where DriveType=3
 +</​code>​
 +Un objeto que lleve un array de ManagementObject es el ManagementObjectCollection,​ este objeto es lo que realmente devuelve una consulta WQL. \\ \\ 
 +Si quisiesemos acceder a una propiedad de un ManagementObject lo pondríamos entre corchetes, por ejemplo a la propiedad Name de un Win32_LogicalDisk guardado en un objeto ManagementObject llamado MO, sería: MO[“Name”]. \\ \\ 
 +Para realizar una consulta WQL lo haremos mediante el objeto ManagementObjectSearcher,​ que al llamar a su constructor se le pasa un string que sería la WQL. Luego, al llamar al método .Get devolvería ese ManagementObjectCollection del que hemos hablado antes.
 +
  
 ===== Notas ===== ===== Notas =====
 +==== Acceder a los nombres de una enumeración ====
 +La base para las enumeraciones está en System.Enum y mediante esta podemos saber los nombres de una enumeración:​
 +<code csharp>
 +enum Meses = {Enero, Febrero, Marzo}
 +string[] names = System.Enum.GetNames(typeof(Meses));​
 +</​code>​
 +==== Herencia en estructuras ====
 +  * Las estructuras no heredan de object, sino de ''​ValueType''​.
 +  * No pueden heredar de otra cosa que no sea una interfaz.
 +
 +
 +
 ==== El por qué del STAThread ==== ==== El por qué del STAThread ====
 Cuando vamos a usar, por ejemplo, el método ''​Clipboard.SetText''​ y no tenemos el ''​STAThread''​ declarado en el método main nos salta un error. Para que nuestro thread pueda acceder a ciertas características del operativo debemos incluir este atributo al main: Cuando vamos a usar, por ejemplo, el método ''​Clipboard.SetText''​ y no tenemos el ''​STAThread''​ declarado en el método main nos salta un error. Para que nuestro thread pueda acceder a ciertas características del operativo debemos incluir este atributo al main:
Línea 708: 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 713: 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''​+
highlevel/csharp/xtra.1230378768.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)