marzo 2007 Blog Posts
Per ottenere l'elenco completo delle cose che NON si possono fare con le classi statiche, e' piu' facile andare nel file "errors.h" di SSCLI 2.0 e cercare gli errori che riguardano le static class. L'elenco ottenuto e' piu' dettagliato rispetto a quello del paragrafo 17.1.1.3 delle specifiche:
CS0418, AbstractSealedStatic ("una classe astratta non può essere sealed o static")
CS0441, SealedStaticClass ("una classe non può essere contemporaneamente static e sealed")
CS0708, InstanceMemberInStaticClass ("impossibile dichiarare membri di istanza in una classe statica")
CS0709, StaticBaseClass ("una classe non può derivare da una classe statica")
CS0710, ConstructorInStaticClass ("le classi statiche non possono avere costruttori di istanza")
CS0711, DestructorInStaticClass ("le classi statiche...
La soluzione al Quiz Sharp #61 mi sembra abbastanza interessante per meritare un post a parte (nomi come Miguel de Icaza, Jon Skeet, Abhinaba Basu, hanno considerato strano il comportamento del compilatore C# 2.0 nel comparare i valori value type a null)
La risposta corretta al quiz e' che eseguendo lo snippet si ottiene un'eccezione a runtime (StackOverflowException). Vediamo di seguito il perche', con le specifiche in mano:
Per evaluare l'espressione value != null nell'implementazione dell'operatore, dove value e' un not-nullable value type, il compilatore applica alcune conversioni. Per esempio, per ogni nullable type, esiste una conversione implicita dal tipo null al...
Di seguito un quiz a quattro mani con Matteo Spreafico, risultato di un bellissimo e lunghissimo chat:
Cosa stampa a video questo snippet?
struct Foo{ public static implicit operator bool(Foo value) { return value != null; }}class Test{ static void Main() { if (new Foo()) { System.Console.WriteLine("Ciao"); } }}
1. niente
2. Ciao
3. non compila
4. runtime exception