Partager via


Avertissement du compilateur (niveau 1) CS1911

Mise à jour : novembre 2007

Message d'erreur

L'accès au membre 'nom' via un mot clé 'base' à partir d'une méthode anonyme, d'une expression lambda, d'une expression de requête ou d'un itérateur entraîne la génération d'un code non vérifiable. Envisagez de déplacer l'accès dans une méthode d'assistance du type conteneur.
Access to member 'name' through a 'base' keyword from an anonymous method, lambda expression, query expression, or iterator results in unverifiable code. Consider moving the access into a helper method on the containing type.

L'appel de fonctions virtuelles avec le mot clé base dans le corps de la méthode d'un itérateur ou de méthodes anonymes entraîne la génération d'un code non vérifiable. Ce code non vérifiable ne s'exécutera pas dans un environnement de confiance partielle.

Une solution à l'erreur CS1911 consiste à déplacer l'appel de fonction virtuelle vers une fonction d'assistance.

Exemple

L'exemple suivant génère l'erreur CS1911.

// CS1911.cs
// compile with: /W:1
using System;

delegate void D();
delegate D RetD();

class B {
   protected virtual void M() {
      Console.WriteLine("B.M");
   }
}

class Der : B {
   protected override void M() {
      Console.WriteLine("D.M");
   }

   void Test() { base.M(); }
   D Test2() { return new D(base.M); }

   public D CallBaseM() {
      return delegate () { base.M(); };   // CS1911

      // try the following line instead
      // return delegate () { Test(); };
   }

   public RetD DelToBaseM() {
      return delegate () { return new D(base.M); };   // CS1911

      // try the following line instead
      // return delegate () { return Test2(); };
   }
}

class Program {
   public static void Main() {
      Der der = new Der();
      D d = der.CallBaseM();
      d();
      RetD rd = der.DelToBaseM();
      rd()();
   }
}