gennaio 2008 Blog Posts

[70-536] Compressing Streams

Lesson 3 Compressing Streams Alcune volte è necessario comprimere uno stream per risparmiare spazio o banda: ci aiutano le classi GZipStream e DeflateStream. Entrambe si limitano a comprimere dati fino a 4GB. La differenza tra le due è che la prima permette l'introduzione di determinati header per includere informazioni extra utili alla decompressione dello stream. Ne deriva che il file scritto con DeflateStream è più piccolo. Per comprimere: FileStream sourceFile = File.OpenRead(inFileName); FileStream destinationFile = File.Create(outFileName); GZipStream compStream = new GZipStream(destFile, CompressionMode.Compress); int theByte = sourceFile.ReadByte(); while(theByte != -1) { compStream.WriteByte((byte)theByte); theByte = sourceFile.ReadByte(); } Per decomprimere: FileStream sourceFile = FileOpenRead(inFileName); FileStream destinationFile = File.Create(outFileName); GZipStream compStream = new GZipStream(sourceFile, CompressionMode.Decompress); int theByte = compStream.ReadByte(); while(theByte != -1) { destFile.WriteByte((byte)theByte); theByte =...

[70-536] Reading and writing files

Lesson 2 Reading and writing files Questo argomento si apre parlando della classe Stream e delle classi derivate: FileStream MemoryStream CryptoStream NetworkStream GZipStream Ci sono altre classi correlate come File e Directory (entrambe statiche), FileAccess (enum con Read, Write and ReadWrite), FileMode (enum con Append, Create, CreateNew, Open, OpenOrCreate, Truncate - CreateNew rilancia eccezione se il file esiste, Open rilancia eccezione se il file non esiste, Truncate svuota il file). Per leggere da un file: FileStream theFile = File.Open(@"C:\boot.ini", FileMode.Open, FileAccess.Read); StreamReader sr = new...

[70-536] Input/Output

Lesson 1 Input/Output Tutto parte dal namespace System.IO. Abbiamo classi che derivano da FileSystemInfo (FileInfo e DirectoryInfo a cui si aggiunge DriveInfo che non deriva da questa) per avere informazioni circa l'input/output e classi di utilità come File, Directory, Path. Da queste classi è possibile effettuare tutte le più comuni operazioni su file e directory. A queste classi si aggiunge il FileSystemWatcher per monitorare cambiamenti nel file system. Da ricordare che il cambio di estensione è logico e non fisico! Technorati tags: [70-536]

[70-536] Converting between types

Lesson 4 Converting between types Il Framework può convertire automaticamente i built-in types. Le conversioni di tipo widening sono permesse implicitamente in C# e VB. Quelle di tipo narrowing richiedono la conversione esplicita in C#. Si chiama Boxing il passaggio da value type a reference type mentre Unboxing viceversa. Entrambi comportano overhead e sarebbero da evitare, soprattutto in cicli. Si verifica boxing anche quando si chiamano metodi virtuali di una struct che eredita da System.Object (come ToString). Le conversioni possono avvenire: Definendo operatori di conversione (nuovi del .Net 2.0); Sovrascrivendo ToString() e Parse() per conversioni a stringa e...

[70-536] Constructing classes

Lesson 3 Constructing classes Niente da dire su ereditarietà, le interfacce sono un contratti tra le classi che le implementano (importanti IComparable, IDisposable, IConvertible, ICloneable...). Classi parziali per suddividere le classi su più files (prime fra tutte quelle di designer del Framework). Generics buoni per ridurre gli errori di run-time e migliorare le performances, nuovi del Framework 2.0, sostituiscono gli Object di uso precedente. Su questi si possono anche definire dei vincoli (implementa un'interfaccia, deriva da una classe specifica, implementazioni di costruttori con meno parametri, essere di un certo value-type o reference-type). Occhio che EventHandler è un nuovo tipo di built-in Generics. L'evento è...

[70-536] Reference Types

Lesson 2 Reference Types Chiaro e tondo, un reference type è diverso dal value type perchè viene memorizzato sullo stack il puntatore all'area di memoria dove è contenuto il valore da memorizzare. Il valore viene memorizzato nell'heap. Una copia di reference type comporta una copia del puntatore. L'heap "subisce" un processo chiamato Garbage Collection per la pulizia dei valori non più utilizzati. Sono reference type le stringhe, i tipi derivanti da Object ad eccezione dei value types, array, stream, StringBuilder ed Exception, oltre ad altri circa 2500 tipi. Occhio alle stringhe che sono immutabili e come tali la concatenazione fatta in modo classico comporta la...

[70-536] Value Types

Lesson 1 Value Types I value types costituiscono il più semplice dato del Framework e derivano da System.Object come tutti i tipi di dato in .Net. Vengono allocati nello stack e per questo sono molto efficienti. Contengono il dato a differenza dei reference types. Sono di tre tipi: Built in value types User defined value types Enumerations I primi sono i tipi di base come byte, int (entrambi anche unsigned), int16-32-64, single, double e decimal. I più diffusi vista l'ottimizzazione presente sono gli int32 e i double. A questi si aggiungono char, boolean,...

Lavori in corso...

In questo periodo sto rilasciando parecchi siti e un forum molto bello... Datemi tempo, poi tornerò anche con la mia prima certificazione. Intanto è arrivato il libro e vi segnalo un link: http://www.knowdotnet.com/   Technorati tags: .NET

Buon Anno!

Buon anno a tutti! E lo sarà senz'altro