Professional Documents
Culture Documents
Certificacion:
SByte 1byte -128 a 127
Byte 1byte 0 a 255
Int16 2bytes -32768 a 32767
Int32 4bytes -2000000000 a 2000000000 ~
UInt32 4bytes 0 a 4200000000 ~
Int64 8bytes
Single 4bytes
Double 8bytes
Decimal 16bytes Financieros y Cientficos
Char 2bytes
Boolean 4bytes
DateTime 8bytes
NULLABLE
dim b as Nullable(Of valuetype) = nothing
b.hasValue
b.Value
STRUCTURE
-16 bytes
Contenido NO cambia
NO se puede hacer cast a reference type
Structure Hola
End structure
ENUMERATIONS
Enum HOLA as Integer
a '0
b '1
c '2
End Enum
ENCODING & DECONDING
UTF32Encoding
UnicodeEncoding (UTF 16)
UTF8 8-16-24
ASCIIEncoding
Dim e as Encoding 0 Encodign.GetEncoding("Korean")
e.getBytes("TEXTO") --> Devuelve arreglo bytes con el texto en el nuevo encoding
EncodingInfo:
e.CodePage
e.Name
e.DisplayName
Escribir Archivo:
Dim x as StreamWriter = new StreamWriter("path",False,Encoding.UTF7)
Dim y as StreamReader = new StreamReader("path",Encoding.UTF7)
Dim x as StreamReader )= new SDteamrReader("path",False,Encoding.Encode...)
COLLECTIONS
Queue: Dequeue, Encueue, Peek
Stack: Pop, Push, Peek
Hashtable: formado de DictionaryEntry
BitArray: Tamao puede cambiar
dim bits as BitArray 0 new BitArray(LONGITUD)
BitVector32: Se guarda en un entero de 32bits
dim m1 as integer = vector.createMask()
dim m2 as Integer = vector.createmask(m1) ...
vector(m1) = True/False
Case Insensitive Collections
dim hola as HashTable = CollectionsUtil.CreateCaseInsensitiveHashtable()
Culture Invariant Collections
dim hash as HashTable = new HashTable(StringComparer.InvariantCulture /
StringComparer.InvariantCultureIgnoreCase)
NameValueCollection
nv.add("key1", "a")
nv.add("key1", "b")
nv.GetValues("key1")
GENERICS
ArrayList <====> List(of T)
Queue <====> Queue(of T)
Stack <====> Stack(of T)
HashTable <====> Dictionary(of T, U)
SortedList <====> SortedList(of T, U)
ListDictionary <====> Dictionary(of T, U)
HybridDictionary <====> Dictionary(of T, U)
NameValueCollection <====> Dictionary(of T, U)
DictionaryEntry <====> KeyValuePair(of T, U)
LinkedList(of T): Count, First, Last, addAfter(e,valor), addBefore
LinkedListNode(of T): list, next, previous, value
Dim e as List(Of T).Enumerator = Lista.GetEnumerator
dim s as T 0 e.Current
SERIALIZAR OBJETOS
Crear una clase Formatter customizada:
Se implementa IFormatter, se deben implementar Serialize(StreamingContext,object) y
deserialize(StreamingContext) as object
System.Runtime.Serialization.Formatters.Binary
Serializar:
Dim data as String = "Texto para serializar"
dim fs as FileStream = new FileStream("path",FileMode.Create)
dim bf as BinaryFormatter = new BinaryFormatter
bf.Serialize(fs, data)
fs.close()
Deserializar:
Dim fs as FileStream = new FileStream("path",FileMode.Open)
dim bf as BinaryFormatter = new BinaryFormatter
dim data as String = ""
data = CType(bf.Deserialize(fs),String)
fs.close()
Clases Serializables
<Serializable()> Class HOLA
Implements IDeserializationCallback 'calcular campos calculados que no se
serializan
public a as integer
public b as decimal
<NonSerialized()> public calculado as decimal
<OptionalField()> d as integer
sub IDeserializationCallback_OnDeserialization(sender) Implements
IDeserializationCallback.onDeserialization
'se corre despues de la deserializacion
calculado = a + b
end sub
End class
Soap Serialization:
System.Runtime.Serialization.Formatters.Soap
SoapAttribute
SoapElement
SoapEnum
SoapIgnore
SoapInclude
XMLSerialization
serializar:
dim fs as FileStream = new FileStream("Path",FileMode.Create)
dim xs as new XMLSerializer(GetTye(objeto))
xs.Serialize(fs, Objeto)
fs.Close()
Deserializar:
dim fs as FileStream = new FileStream("Path",FileMode.Open)
dim xs as new XMLSerializer(T)
dim objeto as T = ctype(xs.DeSerialize(fs), T)
fs.Close()
Todos los miembros a serializar deben ser publicos y debe existir un constructor sin
parametros
XMLIgnore
XMLInclude
XMLAttribute
XMLElement
XMLAnyAttribute
XMLAnyElement
<XMLRoot("RAIZ")> Class HOLA
<XMLAttribute()> public a as integer 'lo mete como atributo
public b as decimal 'lo mete como elemento
<XMLIgnore()> public calculado as decimal 'no lo mete
<OptionalField()> d as integer
Public Sub New()
Mybase.New
End Sub
End class
Usar XSD.exe para crear el schema
El evento UnknownNode(XmlNodeEventArgs) se dispara cuando un elemento no esperado o
nodo es detectado que no calza con el objeto XmlSerializer
<Formatter>.UnsafeDeserialize(stream,headerhandler) = retorna un objeto generico que se
debe convertir al tipo deseado, usa codigo no manejado.
GRAPHICS
Pen para figuras no rellenas
Brush para figurs rellenas
Application Domains
System.AppDomain
Un proceso corre varios assemblies con memoria separada
Default: NO se puede descargar mientras el proceso corre.
Otros:Se pueden descargar mientras el proceso corre.
Crear AppDomain:
Dim d as AppDomain = AppDomain.CreateDomain("NombreDominio")
Cargar Assembly:
d.ExecuteAssembly("nombre.dll") d.ExecuteAssemblyByName("Nombre")
Descargar AppDomain:
AppDomain.Unload(d)
Evidencia: Define a cuales grupos de codigo pertenece el assembly
System.security.policy.Evidence
Dim HostEvidence as Object() = {new Zone(SecurityZone.Internet)}
Dim Evidencia as Evidence = new Evidence(HostEvidence,Nothing)
Dim d as AppDomain = AppDomain.CreateDomain("NombreDominio" [,Evidencia])
d.ExecuteAssembly("Nombre.dll",Evidencia)
Threads
System.Threading
Dim Operation as new ThreadStart(Proc) 'ParameterizedThreadStart(proc)
dim t as new Thread(Operation)
t.Start() 't.Start(param)
t.Join() 'espera hasta que se ejecute
threadPriority.Highest/AboveNormal/Normal/BelowNormal/Lowest
thread.Abort --> ThreadAbortExcetion
Thread.BeginCriticalRegion
Thread.EndCriticalRegion
Interlocked.Increment(var) /add / Exchange /read
SynLock Me
...
End SynLock
Monitor.Enter(Me)
try
Finally
Monitor.Exit(Me)
End try
INTERFACES
IEnumerable/ IEnumerator --> Foreach
col.getEnumeration
Current
moveNext
Reset
------------------------------------------
llamado de una funcion de manera asincronica:
Protected Delegate Function delegado() As String
Protected Function procedimiento() As String
...
End Function
.........
Dim del As New delegado(AddressOf procedimiento)
Dim resultadoAsincronico As IAsyncResult = del.BeginInvoke(Nothing, Nothing)
While Not resultadoAsincronico.IsCompleted
'hacer algo
End While
del.EndInvoke(resultadoAsincronico)
----------------------------------------------------
Reflection:
Clase MethodInfo
IsFamily = determina si un metodo es accesible por la clase y sus desencientes
IsAssembly = determina si un metodo es accesible desde el assembly
IsVirtual = determina si un metodo es virtual
IsStatic = determina si un metodo es estatico
Una clase usa recursos no manejados, mantiene referencias a recursos manejados en otros
objetos, Se requiere que se pueda liberar sus recursos cuando asi se disponga
-Implementar IDisposable
-Dispose (liberar recursos no manejados y manejados)
-Se podria crear un destructor para liberar recursos no manejados, este se llamaria desde el
dispose
-Si hereda de WeakReference el Garbage Collector libera todas las referencias validas o no.
Llamar Codigo no manejado desde una clase manejada:
Se crea un dll del codigo no manejado y se crean metodos prototypo en .NET para cada funcion.
Envolver el codigo no manejado con una clase .net
Que todos los que llamen al metodo del COM que esten en la pila de llamadas tengan permiso
para hacerlo
[SecurityPermission(SecurityAction::Demand,Flags=SecurityPermissionsFlags::UnmanagedCod
e]
Que el llamador inmediato al metodo COM tenga permiso para hacerlo
[SecurityPermission(SecurityAction::LinkDemand,Flags=SecurityPermissionsFlags::Unmanage
dCode]
Que ignore los permisos de los llamantes al metodo COM
[SecurityPermission(SecurityAction::Assert,Flags=SecurityPermissionsFlags::UnmanagedCode]
Que no permita a los llamantes al metodo COM que tienen permiso para llamar metodos com:
[SecurityPermission(SecurityAction::Deny,Flags=SecurityPermissionsFlags::UnmanagedCode]
Definicion de clase que puede interoperar con COM
-Debe tener constructor sin parametros
-Funciones deben ser publicas
-Shared no es soportado por COM
Exception.StackTrace = Muestra la lnea de cdigo que lanz el error
Exception.Data = informacin adicional acerca de la excepcin
Exception.Message = Describe la excepcin
Exception.Source = Nombre de la aplicacin que causa la excepcin
Propiedades de cada Drive:
-Obtener las unidades con DriveInfo.getDrives
-Iterar sobre los drives
-Acceder a las propiedades <DriveInfo>.TotalSize = Capacidad disco
FileSystemInfo = Manipular Archivos o carpetas
Threads
Sleep
SpinLock
WaitCallBack
ProcessThread.IdealProcessor = Solicita un procesador para correr el thread
ProcessorAfinity = Obtiene o define los procesadores que el thread puede calendarizar para
correr
Process.BasePriority = obtiene la prioridad base del proceso
ThreadPool = operaciones simultaneas
proceso que corre una app y le da un archivo con los parametros de entrada:
Process myProcess = new Process ();
myProcess.StartInfo = new ProcessStartInfo ("App.exe");
myProcess.StartInfo.FileName = "sample.txt"
myProcess.Start ();
ConsoleTraceListener = enviar mensajes de trace y debug a la consola
DefaultTraceListener = enviar mensajes de trace y debug a la ventana output
BooleanSwitch class es usada para encender o apagar mensajes trace
Security
-StrongNameIdentityPermission= Verificar la identidad del assembly que llama.
-GACIdentityPermission= Verificar si el assembly esta o no en el GAC.
-PublisherIdentityPermission= Verificar la identidad del Publisher.
-DataPublisherIdentityPermission= Verificar si el assembly puede acceder datos encriptados y
memoria
Definir evidencia para intranet
Dim evidencia as new Evidence()
Evidence.addHost(new Zone(SecurityZone.Intranet))
CodeAccessPermission.RevertAssert() = Deshacer un Assert previo
CodeAccessPermission.RevertDeny() = Deshacer un Deny previo
Recibir Eventos Asincrnicos
ManagementEventWatcher
-Se llama al metodo Start para iniciar a escuchar eventos
-Lanza un EventArrived event cuando llega un evento y hace match con el query
-Escuchar los eventos EventArrived para hacer cualquier operacion que se requiera
-Lanza el Stopped event cuando ya no quiere escuchar mas threads
WaitForNextEvent Es sincrnico el thread actual espera hasta que ocurre el evento que hace
match
Ver el contenido de una seccion del archivo de configuracion:
dim config as Configuration =
configurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
dim seccion as ConfigurationSection = config.GetSection ("Seccion");
Console.WriteLine (section.SectionInformation.GetRawXml ());
Para habilitar el acceso a una seccion por programacion, se deberia crear un
custom section handler class que herede de ConfigurationSection class y
aadir un elemento sectional elemento configSections del archivo de
configuracion
OpenExeConfiguration = retorna objeto Configuration con la configuracion actual
<configuration>.GetSection("Seccion") = devuelve una seccion del archivo de configuracion
<ConfigurationSection>.SectionInformation.getRawXML() = retorna el contenido xml de la
seccion
Asegurarse que una aplicacion va a correr sobre una version especifica del framework:
siempre y cuando el assembly sea hecho en versiones 1.1 o siguientes
en versiones 1.0 se usa requiredRuntime
<Configuration>
<startup>
<SupportedRuntime version=version deseada />
<startup>
<Configuration>
Asegurarse que las personas que usan una version anterior del assembly usen la nueva:
<dependentAssembly>
<assemblyIdentity name="Library" publicKeyToken="32ab4bc45e90a1"
culture="neutral" />
<bindingRedirect oldVersion="1.0.0.0" newVersion="1.1.0.0" />
</dependentAssembly>
Asegurarse que las aplicaciones siempre usen la ultima version de un assembly:
Poner a DEVPATH apuntando a la direccion del bin del assembly
En machine configuration poner
<developmentMode developerInstallation=true>
Demand Todos los que esten en la call stack deben tener el permiso
Assert todos sin importar si lo tienen o no
PermitOnly Solo entran los que tienen el permiso especificado
Deny No entra si tiene permiso
El developmentMode dice al CLR que use DEVPATH para localizar assemblies, si este no se
aade al machine.config estas variables son ignoradas
Services
-ServiceInstaller.StartType = manual automatico
-Net.exe= con la opcion CONFIG se usa para configurar los servicios del servidor
-InstallUtil se usa para instalar el servicio
-ServiceProcessInstaller Class= definir credenciales
-Un ServiceController es capaz de controlar servicios en otras computadoras la propiedad
MachineName dice cual maquina, cuando un servicio esta en estado Stopped debe ser iniciado
con el metodo Start
Continue inicia un servicio en estado Paused
Servicio que verifique algo
Se agrega un timer
Elapsed event = cuando se cumple el tiempo del timer
Onstart del servicio debe iniciar el timer.
El constructor del servicio no se llama cuando se reinicia.
<EventLog>.Source 0
<EventLogEntry>.EntryType = EventLogEntryType.Error /.Warning
Devolver los Servicios pausados:
Dim searcher as new ManagementObjectSearcher (Select * from Win32_Service where State =
Paused)
Meterlos en una coleccion
For each ManagementObject mo in searcher.Get()
Collection1.add(mo(DisplayName)
next
dim log as new EventLog ()
log.Source = "Application1"
log.Log = "Profile"
log.WriteEntry ("Writing to event log.")
crear un eventlog en otra maquina
dim sourceData as new EventSourceCreationData ("Application1","Profile")
sourceData.MachineName = " CompanyA -SR07"
EventLog.CreateEventSource (sourceData)
Transferir los primeros 80 bytes de un stream a un arreglo de bytes y guardar el numero de bytes
transferidos:
bitsTransferidos= stream1.read(arreglo,0,80)
Que el archivo no herede los default settings de seguridad
-Crear un objeto FileSecurity para aplicar settings de seguridad al archivo.
-Aadir un FileSystemAccessRule para cada setting de seguridad deseado en el FileSecurity.
-Crear el archivo con el constructor que recibe un objeto FileSecurity.
FileSystemAuditRule = especificar Condiciones cuando el acceso a un archivo es auditado.
Enviar Email:
-Crear MailMessage
Dim from as MailAddress=new MailAddress(me@gmail.com)
Dim to as MailAddress=new MailAddress(you@gmail.com)
Dim msg as new MailMessage(from,to)
Msg.subject = prueba
Msg.body = esto es una prueba
-Crear SmtpClient
Dim Cliente as new SmtpClient(dir servidor smtp)
Cliente.send(msg)
Crear evento que invoke a un delegado
Public shared event NombreDelegado NombreEvento
Llamar un metodo del win32 api
[DdlImport(User32,Charset=Charset.Unicode)]public shared extern function
MessageBox(hwnd as integer, text as string, caption as string, type as int)
DeflateStream = comprimir stream sin redundancia ciclica, no verifica descompresion
Dim ds as new DeflateStream(StreamDondeQueda, CompressionMode.Compress, bool)
Serializacion
Serializar un objeto con SOAP
SoapFormatter formatter as new SoapFormatter()
MemoryStream streamDondeQueda as new MemoryStream()
formatter.Serialize(streamDondeQueda,OBJETO)
Encriptar con SHA1
Dim sha1 as new SHA1CryptoServiceProvider()
Dim hash() as byte = sha1.ComputeHash(bytes a encriptar)
Encriptar con MD5
Dim algo as HashAlgoritm = HashAlgoritm.Create(MD5)
Dim hash() as byte = algo.ComputeHash(Bytes a encriptar)
Dominio.setPrincipalPolicy(PrincipalPolicy.UnauthenticatedPrincipal)
crear un appdomain hijo con directorio de assemblies diferente
Dim appSetup As New AppDomainSetup()
appSetup.ApplicationBase = "path del assembly"
AppDomain.CreateDomain("subdominio", AppDomain.CurrentDomain.Evidence,
appSetup)
AppDomain no tiene constructores
AppDomain.CurrentDomain = Thread.GetDomain() = appdomain del Thread actual
AppDomain.CurrentDomain.ShadowCopyFiles = true si las referencias del appdomain ya
fueron cargadas en el cache
Por defecto todos los contadores son readonly
se incrementan con .increment
PerformanceCounterCategoryType.SigleInstance = compartir entre aplicaciones
PerformanceCounterCategoryType.MultiInstance = instancias multiples
Listar informacion de todos los procesadores instalados:
ManagementObjectSearcher processorSearcher = new
ManagementObjectSearcher (
"SELECT * FROM Win32_Processor");
foreach (ManagementObject obj in processorSearcher.Get ())
{
Console.WriteLine ("{0}", obj ["Name"]);
Console.WriteLine ("{0} / {1}", obj ["CurrentClockSpeed"], Obj
["MaxClockSpeed"]);
}
Listar todos los eventos de disco cada hora
EventQuery query = new EventQuery ();
query.QueryString = "SELECT * FROM_InstanceModificationEvent
WITHIN 3600" +
"WHERE TargetInstance ISA 'Win32_DiskDrive'";
72