我正在将 dll 反编译为 C#。反编译器生成的项目之一包含 1000 多个错误行,如下所示:
this.pictureBox1.BeginInit();
Error 385 'System.Windows.Forms.PictureBox' does not contain a definition for 'BeginInit' and no extension method 'BeginInit' accepting a first argument of type 'System.Windows.Forms.PictureBox' could be found (are you missing a using directive or an assembly reference?)
常规 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();
}
}
关于c# - 无定义或扩展方法 - ISupportInitialize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035854/