C# 没有定义或扩展方法-ISupportInitialize
我正在将dll反编译成C。反编译器生成的一个项目包含1000多行错误代码,如下所示:C# 没有定义或扩展方法-ISupportInitialize,c#,.net,.net-reflector,C#,.net,.net Reflector,我正在将dll反编译成C。反编译器生成的一个项目包含1000多行错误代码,如下所示: this.pictureBox1.BeginInit(); 错误385“System.Windows.Forms.PictureBox”不包含 “BeginInit”和无扩展方法“BeginInit”的定义 接受类型为“System.Windows.Forms.PictureBox”的第一个参数 无法找到(是否缺少using指令或程序集 参考?) 常规Picturebox没有BeginInit()方法。我只是
this.pictureBox1.BeginInit();
错误385“System.Windows.Forms.PictureBox”不包含
“BeginInit”和无扩展方法“BeginInit”的定义
接受类型为“System.Windows.Forms.PictureBox”的第一个参数
无法找到(是否缺少using指令或程序集
参考?)
常规Picturebox没有BeginInit()方法。我只是简单地注释了以下几行:
//this.pictureBox1.BeginInit();
然后我检查了另一个反编译器的输出,它如下所示,并且VS编译器没有以前的错误:
((ISupportInitialize)this.pictureBox1).BeginInit();
由于崩溃,我无法使用第二个反编译器一次导出所有源代码。现在我不知道该怎么办了。我无法运行并调试项目,因为需要先清除其他错误。我的选择是:
public static class PictureBoxExtension {
public static void BeginInit(this PictureBox pb){
((ISupportInitialize)pb).BeginInit();
}
}
甚至更好的是,您可以对所有支持ISupportInitialize
的控件尝试此操作。这对正常访问是隐藏的,因为它是显式实现的,因此我们可以使用此扩展来公开它(无需强制转换):
公共静态类SupportInitExtension{
publicstaticvoidbegininit(此tc),其中T:ISupportInitialize{
c、 BeginInit();
}
}
试试这个:
public static class PictureBoxExtension {
public static void BeginInit(this PictureBox pb){
((ISupportInitialize)pb).BeginInit();
}
}
甚至更好的是,您可以对所有支持ISupportInitialize
的控件尝试此操作。这对正常访问是隐藏的,因为它是显式实现的,因此我们可以使用此扩展来公开它(无需强制转换):
公共静态类SupportInitExtension{
publicstaticvoidbegininit(此tc),其中T:ISupportInitialize{
c、 BeginInit();
}
}
我认为解决方案2是“正确”的。至少设计师是这么做的。创建一个带有一些控件的表单,您将看到许多行,如((ISupportInitialize)this.pictureBox1).BeginInit()在InitializeComponent()
方法中使用code>。我认为解决方案2是“正确”的。至少设计师是这么做的。创建一个带有一些控件的表单,您将看到许多行,如((ISupportInitialize)this.pictureBox1).BeginInit()InitializeComponent()
方法中的code>。错误:扩展方法必须在顶级静态类中定义;PictureBoxExtension是一个嵌套类。@NimeCloud是的,您应该尝试在扩展方法
上搜索。那是因为你不知道如何使用它。它应该放在最外层的名称空间中。好的,找到了。这是第二级静态类,现在可以了。当我确认后,我将标记为答案。@NimeCloud我还用更好的代码更新了它,您可以直接在实现ISupportInitialize
的任何控件上调用BeginInit
。您也可以对EndInit
执行相同的操作。对于.NET2.0扩展方法:错误:扩展方法必须在顶级静态类中定义;PictureBoxExtension是一个嵌套类。@NimeCloud是的,您应该尝试在扩展方法
上搜索。那是因为你不知道如何使用它。它应该放在最外层的名称空间中。好的,找到了。这是第二级静态类,现在可以了。当我确认后,我将标记为答案。@NimeCloud我还用更好的代码更新了它,您可以直接在实现ISupportInitialize
的任何控件上调用BeginInit
。您也可以对EndInit
执行相同的操作。对于.NET 2.0扩展方法: