没有定义或扩展方法 - ISupportInitialize

时间:2013-11-17 20:36:37

标签: c# .net .net-reflector

我正在将一个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();

由于崩溃,我无法使用第二个反编译器一次导出所有源。现在我不确定我该做什么。我无法跑步&调试项目因为需要先清除其他错误。我的选择是:

  1. 只需注释掉这些行。
  2. 修改并插入(ISupportInitialize)标记。
  3. 如果可能,请创建扩展方法。
  4. 最后一个选项对我来说似乎最简单。我可以创建BeginInit()扩展方法,它会没有任何问题吗?我该如何实施&使用ISupportInitialize?

1 个答案:

答案 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();
   }
}