Pregunta

Estoy descompilando un DLL en C #. Uno de los proyectos generados de descompilador contiene más de 1000 líneas de buggy que se gustan a continuación:

this.pictureBox1.BeginInit();

Error 385 'System.Windows.Forms.PictureBox' no contiene un Definición para 'Principiante' y ningún método de extensión 'Principiante' aceptando un primer argumento de tipo 'system.windows.forms.picturebox' se puede encontrar (¿está perdiendo una directiva usando o una asamblea? ¿Referencia?)

No hay un método de principios () para la caja de fotos regular. Simplemente comenté las líneas:

//this.pictureBox1.BeginInit();

Luego, he examinado la salida de otro descompilador, se ve como debajo y el compilador VS no tiene un error anterior:

((ISupportInitialize)this.pictureBox1).BeginInit();

Debido a un choque, no pude exportar todas las fuentes a la vez con el segundo descompilador. Ahora no estoy seguro de lo que tengo que hacer. No podía ejecutar y depurar el proyecto debido a que otros errores necesitan ser borrados primero. Mis opciones son:

  1. solo comenta las líneas.
  2. Modificar e insertar (isupportinitializar) etiqueta.
  3. Crea un método de extensión si es posible.
  4. La última opción parece más fácil de mí. ¿Puedo crear un método de extensión inicial (), funcionará sin ningún problema? ¿Y cómo puedo implementar y usar iSupPortinItialize?

¿Fue útil?

Solución

Intenta esto:

public static class PictureBoxExtension {
   public static void BeginInit(this PictureBox pb){
     ((ISupportInitialize)pb).BeginInit();
   }
}

O incluso mejor, puede intentarlo para todos los controles que admiten ISupportInitialize.Esto está oculto del acceso normal porque se implementa explícitamente , por lo que podemos usar esta extensión para exponerla (sin fundición):

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top