AntonioPelleriti.it [aka z9]

I code, therefore I am

NAVIGATION - SEARCH

Programmare con C# 6: in arrivo

Finita la seconda rilettura delle bozze, iniziatala la fase di impaginazione e di impostazione grafica, non manca molto all'uscita in libreria di

Programmare con C# 6, guida completa

Non ho ancora una data di uscita certa, o altri dettagli, come il numero di pagine definitivo, o se qualche capitolo verrà escluso (e magari rilasciato su questo sito in pdf!).

Il libro copretutte le novità introdotte da C# 6, in modo completo ed in modo da rendere il testo il riferimento principale in lingua italiana sul linguaggio C#: l'obiettivo, come per la prima edizione, è stato quello di scrivere il miglior libro italiano su C# 6 (scusate la presuzione!).

Nell'attesa di aggiornarvi con maggiori dettagli di seguito l'elenco degli argomenti che è quasi definitivo.

  • 1. C# e la piattaforma .NET
  • 2. Concetti di base di C#
  • 3 Tipi e oggetti
  • 4 Espressioni e operatori
  • 5 Controllo di flusso
  • 6 Programmazione a oggetti in C#
  • 7 Ereditarietà e polimorfismo
  • 8 Gestione delle eccezioni
  • 9 Tipi generici e collezioni
  • 10 Delegate ed eventi
  • 11 LINQ
  • 12 Multithreading, Programmazione asincrona e parallela
  • 13 XML in C#
  • 14 Reflection, attributi e programmazione dinamica
  • 15 Accesso ai dati
  • 16 .NET Compiler Platform
  • 17 Applicazioni pratiche di C#
  • App. A Stringhe ed espressioni regolari
  • App. B Interoperabilità
  • App. C Risposte alle domande

Noterete la presenza di un nuovo capitolo, il 16, dedicato interamente ad una delle principali nuove funzionalità o caratteristiche di .NET e C# 6: cioè la .NET Compiler Platform, ed inoltre una appendice con le risposte alle domande poste alla fine di ogni capitolo.

 

Inglobare tutte le dll in un singolo exe e utilizzarle con la Reflection

La stragrande maggioranza delle applicazioni usa delle dll esterne, eventualmente di terze parti.

Quando l'applicazione deve essere distribuita anche gli assembly da cui dipende, cioè tutti i riferimenti esterni devono essere distribuiti assieme all'eseguibile. In generale lo si fa con la classica tecnica Xcopy, prendendo tutto quello che c'è nella cartella Bin/Release prodotta da Visual Studio per esempio, oppure creando un setup ad hoc che si occupi di tutto.

Un'altra possibile tecnica è quella di inglobare tutte le dll all'interno dell'eseguibile e quindi con la comodità di distribuire un solo file.

Supponiamo di avere una semplice applicazione Windows Forms, che utilizza una dll per esempio chiamata MyAssembly.dll.

Al progetto Windows Forms, che avrà un riferimento alla libreria, bisogna apportare una prima modifica, aggiungendo il file MyAssembly.dll come un normale file (click con il destro, Add Existing Item e selezione della dll) e quindi, fra le proprietà del file aggiunto, impostando il valore della proprietà Build Action a Embedded Resource.

A questo punto compilando l'applicazione, l'eseguibile prodotto conterrà la dll come risorsa inglobata. Potete verificarlo con un decompilatore come Reflector o JustDecompile.

 

 

Adesso bisogna fare in modo che a runtime l'applicazione sia in grado di recuperare la dll dalle risorse embedded.

Nel metodo Main dell'applicazione aggiungiamo un gestore dell'evento AssemblyResolve dell'AppDomain corrente:

 static void Main()
 {
            AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
...

 

Il gestore dell'evento, si occupa di ricercare fra le risorse embedded l'assembly (l'evento si scatena al primo utilizzo dell'assembly riferito) e di restituirlo leggendone il contenuto e caricandolo con il metodo Assembly.Load:

private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string dllName = new AssemblyName(args.Name).Name + ".dll";

            var asm = Assembly.GetExecutingAssembly();
            String resourceName = asm.GetManifestResourceNames().FirstOrDefault(rn => rn.EndsWith(dllName));
            if (resourceName == null) return null; // Non trovata

            using (var stream = asm.GetManifestResourceStream(resourceName))
            {
                Byte[] assemblyData = new Byte[stream.Length];
                stream.Read(assemblyData, 0, assemblyData.Length);
                return Assembly.Load(assemblyData);
            }
        }

 

 


 

Guest Post su MSDN Italia: Caller Info Attributes in C# 5

Vi segnalo il mio guest post sui blog di MSDN Italia, dedicato ai Caller Info Attributes di C# 5.0,

dal titolo

Ottenere informazioni sul chiamante di un metodo in C# 5

Il link è il seguente: http://blogs.msdn.com/b/italy/archive/2014/11/27/guest-post-ottenere-informazioni-sul-chiamante-di-un-metodo-in-c-5.aspx


Anteprima C# 6, le slide

Vi segnalo che ho pubblicato su slideshare le slide relative alla sessione dedicata alle  Novità di C# 6, tenuta la Microsoft Mobile Camp di Catania, il 13 novembre 2014.

Clicca il seguente link


Microsoft Mobile Camp: 13 novembre a Catania con OrangeDotNet

Lo usergroup OrangeDotNet in collaborazione con Microsoft, il DMI dell'università di Catania e il WCAP Catania, organizza a Catania il Mobile Camp, due giornate formative gratuite.

Nella prima giornata del 13 novembre conosceremo le novità del mondo .NET che stanno per arrivare nei prossimi mesi e quelle già disponibili per gli sviluppatori.

Personalmente terrò una sessione che mostrerà le novità future di C# 6.0.

Nella giornata del 14 novembre, ospitata dal WCAP Catania ci sarà invece la possibilità di mettere in pratica attraverso un laboratorio di sviluppo libero, le proprie conoscenze.

La registrazione è obbligatoria per entrambe le giornate, e visto che a tre settimane dall'evento le persone registrate sono già tantissime, registratevi subito al seguente link:

 agenda e registrazione

ulteriori informazioni e l'agenda dell'evento sono disponibili qui: http://www.orangedotnet.org/Eventi/Mobile-Camp-2014

 

#3 - ITA | Quante e quali sono le parole chiave di C#?

Quante e quali sono le keyword (o parole chiave) che costituiscono il vocabolario del linguaggio C#, secondo le specifiche 5.0?
Esattamente 77, riportate qui di seguito.

abstract
as
base
bool
break
byte
case
catch
char
checked
class
const
continue
decimal
default
delegate
do
double
else
enum
event
explicit
extern
false
finally
fixed
float
for
foreach
goto
if
implicit
in
int
interface
internal
is
lock
long
namespace
new
null
object
operator
out
override
params
private
protected
public
readonly
ref
return
sbyte
sealed
short
sizeof
stackalloc
static
string
struct
switch
this
throw
true
try
typeof
uint
ulong
unchecked
unsafe
ushort
using
virtual
void
volatile
while

 

questo e altro all'interno di Programmare con C# 5, guida completa


Storia delle versioni di .NET, C# e Visual Studio.

Microsoft ha parlato per la prima volta della nuova piattaforma .NET, originariamente conosciuta come NGWS (Next Generation Web Services) alla conferenza PDC dell'11 luglio 2000. rilasciando una agli sviluppatori una Tech Preview.

La prima Beta 1 di .NET 1.0, vede invece la luce l'1 novembre 2000, seguita da una Beta 2 il 20/06/2001. 

Nella seguente tabelle sono riassunte le successive release della piattaforma .NET, delle specifiche di C# e dell'IDE Visual Studio.

Anno  .NET Framework C# Visual Studio
2002 1.0 1.0 Visual Studio .NET 2002
2003 1.1 1.2 Visual Studio .NET 2003
2005 2.0 2.0 Visual Studio 2005
2006 3.0 2.0
2007 3.5 3.0 Visual Studio 2008
2010 4.0 4.0 Visual Studio 2010
2012 4.5 5.0 Visual Studio 2012
2013 4.5.1 5.0 Visual Studio 2013

Storia delle versioni di .NET, C# e Visual Studio.

.NET Framework Versions, C# Releases, Visual Studio Editions history

 

L'operatore di Null Coalescing in C#

L'operatore ?? è detto operatore di null coalescing, ed è molto utile in una serie di situazioni permettendo di scrivere codice più elegante e ristretto in C#.

Quante volte vi è capitato di dover scrivere un blocco if per controllare se una variabile è null, ed agire di conseguenza scegliendo un valore di default da assegnare alla stessa variabile? Ecco un esempio:

string name;
if(str!=null)
{
 name=str;
}
else name="senza nome";

 

Probabilmente starete pensando: "beh c'è sempre l'operatore ternario!", ed in effetti un altro modo di scrivere lo stesso blocco di codice può essere il seguente:

string name= (str!=null) ? str: "senza titolo";

Ma l'operatore di null coalescing, introdotto già con le specifiche 2.0 ma spesso ignorato da chi si avvicina al mondo della programmazione in C#, consente di essere ancora più concisi.

Esso verifica se l'operando a sinistra è diverso da null, ed in tal caso restituisce il valore dell'operando sinistro stesso. In caso contrario invece restituisce l'operando destro:

string name= str ?? "senza titolo";

L'operatore funziona anche con tipi valore, per esempio nel caso seguente, se il valore della variabile nullableInt è null, viene assegnato alla variabile i il valore 1:

int? nullableInt=null;
int i= nullableInt ?? 1; // i vale 1

 

Se invece nullableInt possiede un valore, esso viene assegnato alla variabile:

int? nullableInt=123;
int i= nullableInt ?? 1;  // i vale ora 123

ABC# - Guida alla programmazione in C#

Sono passati tantissimi anni dalla prima stesura di questo libro, se non erro era il 2005, eppure ancora in tanti mi scrivono per chiedermi una copia del pdf, che fra l'altro ormai si trova facilmente digitando su qualsiasi motore di ricerca il titolo oppure semplicemente ricercando Guida di programmazione in C#.

Per quelli che comunque non fossero riusciti a reperirlo ecco qui il link 

ABC# guida alla programmazione in csharp.pdf (1,48 mb)

 

Se vuoi offrirmi un caffè o una birra... grazie!

 

 

La versione del libro aggiornata alle specifiche di C# 5.0 C#  6.0 è diventata un libro vero e proprio!

Programmare con C# - Guida alla completa, edito nel 2014 da LSWR

Programmare con C# 6 - Guida alla completa, edito nel 2016 da LSWR

http://www.antoniopelleriti.it/page/libro-csharp