Нет определения или метода расширения - Isupportinitialize
-
21-12-2019 - |
Вопрос
Я декомпиляю DLL в C #. Один из генерируемых декомпилярных проекта содержит 1000+ багги, которые подобны ниже:
this.pictureBox1.BeginInit();
.
Ошибка 385 'System.windows.forms.picturebox' не содержит Определение для «начинающегося» и никакого метода расширения «Ongistinit» Принимая первый аргумент типа «System» .Windows.Forms.PictureBox ' можно найти (вы пропустите директиву с использованием или сборкой Ссылка?)
Нет метода начинающих () для обычного i Plationalbox. Я просто прокомментировал линии:
//this.pictureBox1.BeginInit();
.
Тогда я осмотрел выходной разъем другого декомпилятора, он выглядит как приведено ниже, а VS компилятор не предыдущая ошибка:
((ISupportInitialize)this.pictureBox1).BeginInit();
.
Из-за аварии я не мог экспортировать все источники сразу со вторым декомпилером. Теперь я не уверен, что я должен сделать. Я не мог запустить и отладки проекта из-за других ошибок необходимо сначала очистить. Мои варианты:
- Просто прокомментируйте линии.
- Изменить и вставить (isupportinitialize) тег.
- Создать метод расширения, если это возможно.
Последняя вариант кажется легкой для меня. Могу ли я создать метод расширения OnginitIt (), это будет работать без проблем? А как я могу реализовать и использовать 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();
}
}
.