Domanda

Sto decompendo una DLL in C #. Uno dei progetti generati da Decompiler contiene 1000+ linee buggy che uno come sotto:

this.pictureBox1.BeginInit();
.

.

Errore 385 'System.Windows.Forms.picturebox' non contiene un Definizione per 'BeginInit' e nessun metodo di estensione 'BeginInIT' Accettare un primo argomento di tipo 'system.windows.forms.picturebox' potrebbe essere trovato (ti manca una direttiva usando la direttiva o un assemblaggio Riferimento?)

Non c'è un metodo BeginInIt () per Picturebox normale. Ho semplicemente commentato le linee:

//this.pictureBox1.BeginInit();
.

Allora ho esaminato l'output di un altro decompilatore, sembra che il compilatore VS non abbia un errore precedente:

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

A causa di un incidente, non ho potuto esportare tutte le fonti contemporaneamente con il secondo decompilatore. Ora non sono sicuro di cosa devo fare. Non è stato possibile eseguire e debug del progetto a causa di altri errori devono essere cancellati prima. Le mie opzioni sono:

    .
  1. Basta commentare le linee.
  2. Modifica e inserisci tag (isupportinitialize).
  3. Crea un metodo di estensione se possibile.
  4. L'ultima opzione sembra più facile per me. Posso creare un metodo di estensione BeginInit (), funzionerà senza alcun problema? E come posso implementare e utilizzare IsupportItilizzazione?

È stato utile?

Soluzione

Prova questo:

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

O ancora meglio, puoi provare questo per tutti i controlli che supportano ISupportInitialize.Questo è nascosto dall'accesso normale perché è implementato esplicitamente , quindi possiamo usare questa estensione per esporlo (senza fusione):

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top