Compartir a través de


Advertencia del compilador (nivel 1) CS1911

Actualización: noviembre 2007

Mensaje de error

El acceso al miembro 'nombre' a través de una palabra clave 'base' desde un método anónimo, una expresión lambda, una expresión de consulta o un iterador genera un código que no se puede comprobar. Mueva el acceso a un método auxiliar en el tipo contenedor.
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.

Las llamadas a funciones virtuales con la palabra clave base dentro del cuerpo del método de un iterador o métodos anónimos generan un código que no se puede comprobar. Dicho código no se podrá ejecutar en un entorno de confianza parcial.

Una solución para la advertencia CS1911 es mover la llamada a la función virtual a una función auxiliar.

Ejemplo

El código siguiente genera la advertencia 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()();
   }
}