Errore del compilatore CS0460

Aggiornamento: novembre 2007

Messaggio di errore

I vincoli per i metodi di override e implementazione di interfacce esplicite sono ereditati dal metodo base, pertanto non possono essere specificati in maniera diretta.
Constraints for override and explicit interface implementation methods are inherited from the base method, so they cannot be specified directly

Quando un metodo generico incluso in una classe derivata esegue l'override di un metodo nella classe base, non è possibile definire vincoli sul metodo sottoposto a override. Il metodo di override nella classe derivata eredita infatti i vincoli dal metodo nella classe base.

Esempio

Il seguente codice di esempio genera l'errore CS0460.

// CS0460.cs
// compile with: /target:library
class BaseClass 
{
   BaseClass() { }
}

interface I
{
   void F1<T>() where T : BaseClass;
   void F2<T>() where T : struct;
   void F3<T>() where T : BaseClass;
}

class ExpImpl : I
{
   void I.F1<T>() where T : BaseClass {}   // CS0460
   void I.F2<T>() where T : class {}  // CS0460
}