Lire en anglais

Partager via


Avertissement du compilateur (niveau 1) CS1911

L’accès au membre 'name' via un mot clé 'base' à partir d’une méthode anonyme, d’expression lambda, d’expression de requête ou d’un itérateur entraîne la génération d’un code non vérifiable. Si possible, déplacez l’accès vers une méthode d’assistance sur le type conteneur.

L’appel de fonctions virtuelles avec le mot clé base à l’intérieur du corps de méthode d’un itérateur ou de méthodes anonymes génère du code non vérifiable. Le code non vérifiable ne s’exécute pas dans un environnement de confiance partielle.

Pour résoudre l’erreur CS1911, une solution consiste à déplacer l’appel de fonction virtuelle vers une fonction d’assistance.

Exemple

L’exemple suivant génère l’avertissement 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()();  
   }  
}