我正在将一个dll反编译为C#。其中一个反编译生成的项目包含1000多个错误的行,如下所示:
this.pictureBox1.BeginInit();
错误385'System.Windows.Forms.PictureBox'不包含 'BeginInit'的定义,没有扩展方法'BeginInit' 接受类型为'System.Windows.Forms.PictureBox'的第一个参数 可以找到(你错过了使用指令或程序集 引用?)
常规Picturebox没有BeginInit()方法。我简单地评论了这些界限:
//this.pictureBox1.BeginInit();
然后我检查了另一个反编译器的输出,它看起来如下,VS编译器没有先前的错误:
((ISupportInitialize)this.pictureBox1).BeginInit();
由于崩溃,我无法使用第二个反编译器一次导出所有源。现在我不确定我该做什么。我无法跑步&调试项目因为需要先清除其他错误。我的选择是:
最后一个选项对我来说似乎最简单。我可以创建BeginInit()扩展方法,它会没有任何问题吗?我该如何实施&使用ISupportInitialize?
答案 0 :(得分:4)
试试这个:
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();
}
}