In questo caso sono in esecuzione in un caso angolo relativo alla differenza con l'ambito dei metodi/proprietà dell'istanza in C#. Ecco il codice:La differenza tra il compilatore Mono C# e il compilatore MS C# rispetto all'ambito
public class Base
{
public EventHandler Click {get;set;}
public Base(EventHandler clickHandler)
{
this.Click = clickHandler;
}
}
public class Derived: Base
{
public Derived(): base((sender, e) => Execute())
{
}
private void Execute()
{
}
}
Il codice compila bene su MonoDevelop 3.0, ma dà un errore in VS2010 dicendo: è necessario un riferimento a un oggetto per il campo non statico, metodo o proprietà "Base.Execute" Fondamentalmente, si riduce al fatto che quando si richiama il costruttore della classe base dal costruttore della classe derivata, il compilatore C# di MS non consente l'accesso ai metodi/proprietà della classe derivata, ecc. In che modo?
Mi sembra che sia un errore in Mono. Sospetto che sia facile rappresentarlo in IL - è una limitazione puramente C#. –
Sto pensando perché questa restrizione, però, è perché quando si chiama il costruttore della classe base, la classe derivata non è ancora inizializzata e quindi non può accedere al suo membro di istanza? – imgen
Si può facilmente accedere a "questo" all'interno del costruttore (inclusa la base uno - vale a dire verranno chiamate le funzioni virtuali della classe derivata). Penso che la ragione è che l'uso di questo a quel punto sarà soggetto a strane restrizioni e modifiche non correlate (ad esempio, l'inizializzazione del campo di spostamento dalla dichiarazione a un costruttore) potrebbe modificare il comportamento del codice. –