정의 또는 확장 방법 없음 - ISupportInitialize
-
21-12-2019 - |
문제
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();
충돌로 인해 두 번째 디컴파일러로 모든 소스를 한 번에 내보낼 수 없었습니다.이제 나는 무엇을 해야 할지 모르겠습니다.다른 오류를 먼저 지워야 하기 때문에 프로젝트를 실행 및 디버그할 수 없습니다.내 옵션은 다음과 같습니다
- 해당 줄을 주석 처리하면 됩니다.
- (ISupportInitialize) 태그를 수정하고 삽입합니다.
- 가능하면 확장 메서드를 만듭니다.
마지막 옵션이 나에게 가장 쉬운 것 같습니다.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();
}
}