You are on page 1of 12

VALUE TYPES

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

You might also like