Nessuna definizione o metodo di estensione - isupportinitialize
-
21-12-2019 - |
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:
- .
- Basta commentare le linee.
- Modifica e inserisci tag (isupportinitialize).
- Crea un metodo di estensione se possibile.
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?
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
public static class SupportInitExtension {
public static void BeginInit<T>(this T c) where T : ISupportInitialize {
c.BeginInit();
}
}
.