문제

DLL을 C#으로 디컴파일하고 있습니다.디컴파일러로 생성된 프로젝트 중 하나에는 아래와 같은 1000개 이상의 버그가 있는 라인이 포함되어 있습니다.

this.pictureBox1.BeginInit();

오류 385 'system.windows.forms.picturebox'는 '시작'에 대한 정의가 포함되어 있지 않으며 확장 메소드가 'system.windows.forms.picturebox'를 찾을 수있는 첫 번째 인수를 허용합니다. 지침 또는 어셈블리 참조 사용?)

일반 Picturebox에는 BeginInit() 메서드가 없습니다.나는 단순히 다음 줄을 주석 처리했습니다.

//this.pictureBox1.BeginInit();

그런 다음 다른 디컴파일러의 출력을 조사했는데 아래와 같으며 VS 컴파일러에는 이전 오류가 없었습니다.

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

충돌로 인해 두 번째 디컴파일러로 모든 소스를 한 번에 내보낼 수 없었습니다.이제 나는 무엇을 해야 할지 모르겠습니다.다른 오류를 먼저 지워야 하기 때문에 프로젝트를 실행 및 디버그할 수 없습니다.내 옵션은 다음과 같습니다

  1. 해당 줄을 주석 처리하면 됩니다.
  2. (ISupportInitialize) 태그를 수정하고 삽입합니다.
  3. 가능하면 확장 메서드를 만듭니다.

마지막 옵션이 나에게 가장 쉬운 것 같습니다.BeginInit() 확장 메서드를 만들 수 있나요? 문제 없이 작동하나요?ISupportInitialize를 어떻게 구현하고 사용할 수 있나요?

도움이 되었습니까?

해결책

이 시도:

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

또는 더 나은 방법은 지원하는 모든 컨트롤에 대해 이 방법을 시도해 볼 수 있다는 것입니다. ISupportInitialize.이는 구현되었기 때문에 일반 액세스에서는 숨겨집니다. 명시적으로, 따라서 이 확장을 사용하여 (캐스트 없이) 노출할 수 있습니다.

public static class SupportInitExtension {
   public static void BeginInit<T>(this T c) where T : ISupportInitialize {
     c.BeginInit();
   }
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top