Pergunta

Eu estou descompilação uma dll em C#.Um dos decompiler projeto gerado contém 1000+ buggy linhas que um, como abaixo:

this.pictureBox1.BeginInit();

Erro 385 'Do Sistema.O Windows.Formulários.PictureBox' não contém uma definição para 'BeginInit' e nenhum método de extensão 'BeginInit' a aceitação de um primeiro argumento do tipo 'System.O Windows.Formulários.PictureBox' pode ser encontrado (faltam usando uma diretiva ou uma montagem referência?)

Não há BeginInit() método para regular Picturebox.Eu simplesmente comentei as linhas:

//this.pictureBox1.BeginInit();

Então eu tenho examinado em outro decompiler é de saída, parece abaixo e VS compilador não tem erro anterior:

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

Devido a uma falha, eu não conseguia exportar todas as fontes de uma vez com a segunda decompiler.Agora eu não tenho certeza do que eu tenho que fazer.Eu não conseguia executar e depurar o projeto por causa de outros erros precisam ser limpo primeiro.Minhas opções são:

  1. Basta comentar as linhas.
  2. Modificar e inserir (ISupportInitialize) marca.
  3. Criar um método de extensão, se possível.

Última opção parece mais fácil para mim.Posso criar BeginInit() método de extensão, será que vai funcionar sem qualquer problema?E como posso implementar e usar ISupportInitialize?

Foi útil?

Solução

Tente isso:

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

Ou melhor ainda, você pode tentar este para todos os controlos de apoio ISupportInitialize.Isso está oculto a partir do acesso normal porque ele está implementado explicitamente, e , assim, podemos usar essa extensão para expô-lo (sem carcaça):

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top